2

由于 Chrome 将于SameSite=None2 月 4 日从 80 版本强制使用和 Secure 标志,因此我尝试使用以下代码行在我的 cookie 中设置此标志:

HttpCookie myCookie = new HttpCookie("XYZ");
myCookie.Value = newCookie;
myCookie.SameSite = SameSiteMode.None;
myCookie.Secure = true;
myCookie.Expires = DateTime.Now.AddYears(2);
context.Response.Cookies.Add(myCookie); 

但是这些属性不起作用。即使在将 .Net Framework 版本升级到 4.8 后,此标志也没有设置SameSite=None为 cookie 所需的。我还面临一个奇怪的问题是,当我在 web.config 中使用以下行时,从服务器请求它时,我的 cookie 中正确设置了该标志:

<sessionState cookieSameSite="None" />
<httpCookies sameSite="None" requireSSL="true" />

但是当我在负载平衡的另一台服务器上进行相同的配置和发布时,它不起作用。

有没有人知道如何在 C# 中直接设置这个东西?

提前感谢您的帮助

4

2 回答 2

5

您必须安装 .NET Framework 的 2019 年 12 月 10 日(或更高版本)累积更新。搜索 Microsoft 支持站点以找到适合您的 Windows 版本和 .NET Framework 的更新。

如果没有更新,ASP.NET 将永远不会将 SameSite=None 属性添加到响应 cookie。

通过更新,如果您将HttpCookie.SameSite显式设置为 SameSiteMode.None 或<httpCookies sameSite="None">在 Web.config 中设置该属性,ASP.NET 将向响应 cookie 添加 SameSite=None 属性。此更新还将默认 SameSite 模式更改为 ASP.NET 表单身份验证和会话 cookie 的 Lax。要将它们改回无,请在 Web.config 中设置<forms cookieSameSite="None"><sessionState cookieSameSite="None">属性。

于 2020-01-31T22:24:16.887 回答
0

通过直接添加标题解决了这个问题:

Response.Headers.Add("set-cookie", "mysessioncookie=theValue; path=/; SameSite=Strict")

于 2022-02-24T15:40:59.957 回答