在一个域、同一控制器上出现错误“Set-Cookie 标头被阻止,因为其域属性无效”

问题描述 投票:0回答:1

我正在构建一个 Asp.net core 8 mvc 应用程序并有一个控制器。

我的目标是在重定向到不同的域之前在 302 重定向上设置持久 cookie。我的控制器“Checker”操作“Check1”首先重定向到同一控制器内的操作“Check2”。 “Check2”最后重定向到外部网址。

Check1 url: https://localhost:7058/checker/Check1    
Check2 url: https://localhost:7058/checker/Check2

在“网络”选项卡上的开发人员工具中,我看到两个重定向。

从“Check1”到“Check2”的第一个重定向在“响应标头”下显示一条警告“通过 Set-Cookie 标头设置 cookie 的尝试被阻止,因为其 Domain 属性对于当前主机 url 无效。”并且没有设置 cookie。

设置cookie的代码

Response.Cookies.Append("afc", token, new CookieOptions
                {
                    Domain = baseUrl,
                    IsEssential = true,
                    Expires = DateTime.Now.AddDays(365),
                    Secure = true,
                    SameSite = SameSiteMode.Lax,
                    Path = "/"
                });

baseUrl 设置为“https://localhost:7058”

设置-Cookie:

afc=test123; expires=Thu, 10 Apr 2025 17:15:54 GMT; domain=https://localhost:7058; path=/; secure; samesite=lax

我检查了什么?

  1. 应用程序使用 https,本地和在线行为相同
  2. Cookie 设置:IsEssential 和 Secure 设置为 true。域和端口不变。同一个站点严格、宽松或没有都没有什么区别。
  3. 当我将其托管在具有公共域的 IIS 服务器上时,行为是相同的,例如“子域名.azure.com”
  4. 返回视图(状态代码 200 正常)而不是 RedirectToAction(状态代码 302)没有什么区别。
  5. Cookie 域末尾是否带有“/”并没有什么区别

我相信我已经阅读了 stackoverflow 上有关此错误以及这篇文章的所有现有问题和答案,但我无法弄清楚。

请您指教一下吗?

asp.net-mvc asp.net-core .net-core cookies
1个回答
0
投票

看来 Cookie 选项中的域参数应该只是主机名,没有协议和端口。例如。在本地工作时,它应该是“localhost”。

工作集-Cookie:

afc=test123; expires=Thu, 10 Apr 2025 17:15:54 GMT; domain=localhost; path=/; secure; samesite=lax
© www.soinside.com 2019 - 2024. All rights reserved.