asp.net-mvc - 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
解决方案
如果服务器不支持SameSite=None
属性值,您可以尝试Set-Cookie
直接发送标头。
Response.AppendHeader("Set-Cookie",
"SuperCookie=" + dbNewCustomerCookie.CustomerCookieID.ToString()
+ "; Max-Age=63113904"
+ "; HttpOnly"
+ "; Secure"
+ "; SameSite=None"
);
推荐阅读
- java - 使用 Fabric8 的 Kubernetes 客户端 API
- python - 如何使用 2 个参考对包含列表的列表进行排序
- amazon-cloudformation - 无法使用依赖于 AWS Glue 中的爬网程序的控制台创建触发器
- python - MS Teams 上的 Python 网络摄像头实时编辑
- ios - LoginKit 在 Snapchat 上进行身份验证后无法返回应用程序
- c++ - 跨类访问方法/对象时的未知覆盖说明符
- sql - 我可以在不同列上对同一个表进行多次连接吗?
- python - for s in string_list: s = func(s) can't change string s
- javascript - 全球同时按时间显示/隐藏广告
- c# - 如何在 C# 中使用 iText7 从页面顶部开始绘制长表?