首页 > 解决方案 > Cookie SameSite 属性在本地主机上有效,但在发布到服务器后无效

问题描述

我使用 ASP MVC 和 .NET 4.7.2 在服务器端设置 cookie,代码如下:

            ClientCookie = new HttpCookie("SuperCookie");
            ClientCookie.Value = dbNewCustomerCookie.CustomerCookieID.ToString(); // new inserted DB value
            ClientCookie.Expires = DateTime.Now.AddYears(2);
            ClientCookie.HttpOnly = true;
            ClientCookie.Secure = true;
            ClientCookie.Shareable = true;
            ClientCookie.SameSite = SameSiteMode.None;
            Response.SetCookie(ClientCookie);
            Response.Flush();

虽然在 localhost 上工作正常并且 SameSite 设置为 None,但在将其推送到服务器后,SameSite 标志在每次请求后都会取消设置。本地主机和服务器版本都通过 HTTPS 运行。检查服务器上的 .NET 版本,删除要重新创建的 cookie,尝试在服务器上使用不同的 web.config 设置,还尝试使用 URL 重写模块,但没有任何效果。

在此处输入图像描述

这可能是代码问题还是服务器/主机问题?我们使用亚马逊(可以访问 IIS 的私有服务器)来托管我们的网站。

更新:在服务器 localhost 上运行站点始终将 SameSite 返回为空,而开发机器始终返回 SameSite 设置为无。两台机器都安装了 .NET 4.7.2,在 IIS 7 上使用相同的 web.config 运行。

更新 2:如果我设置 ClientCookie.SameSite = SameSiteMode.Lax 那么它也适用于服务器请求;但无法将模式设置为 SameSiteMode.None。在 Lax 模式下,不会为跨站点请求创建 cookie,这是必需的,因为我从 iframe 调用网站。

更新 3:我认为这是因为服务器没有更新支持相同站点的最新功能: https ://docs.microsoft.com/en-us/aspnet/samesite/kbs-samesite ,因为公司不会更新服务器(内部政策)我会尝试从客户端设置cookie

标签: asp.net-mvccookiessamesite

解决方案


如果服务器不支持SameSite=None属性值,您可以尝试Set-Cookie直接发送标头。

Response.AppendHeader("Set-Cookie",
  "SuperCookie=" + dbNewCustomerCookie.CustomerCookieID.ToString()
  + "; Max-Age=63113904"
  + "; HttpOnly"
  + "; Secure"
  + "; SameSite=None"
);

推荐阅读