如何解决ASP.NET-Request.Cookies不再适用于Chrome V80 +
在与最近发布的Chromes samesite cookie政策毫无关系的地方,我现在在ASP.NET中更新cookie时遇到了问题。
我有一个简单的cookie集合来存储基本的用户设置。 Cookie的生成和更新使用下面的代码。
设置COOKIE
If Response.Cookies("Settings") IsNot Nothing Then
Dim cookie As HttpCookie = Request.Cookies("Settings")
cookie("Setting01") = ddl.SelectedValue
cookie.Expires = Date.Now.AddDays(365)
Response.Cookies.Add(cookie)
End If
首次创建Cookie时,其显示如下。
更新设置并再次调用上述代码后,值将被删除。
这仅在Chrome中发生,并且仅在我更新到Chrome V84之后
为了适应相同的站点要求,我对web.config进行了以下近期更改。
<sessionState cookieless="false" cookieSameSite="None" />
<httpCookies httpOnlyCookies="true" sameSite="None" requireSSL="true" />
问题在哪里?
这部分代码现在什么也不返回
Request.Cookies("Settings")
解决方法
解决方案
此问题是由于在创建新Cookie时未在代码后面显式设置SameSiteMode
引起的。
If Response.Cookies("Settings") IsNot Nothing Then
Dim cookie As HttpCookie = Request.Cookies("Settings")
cookie("Setting01") = ddl.SelectedValue
cookie.Expires = Date.Now.AddDays(365)
cookie.SameSite = SameSiteMode.Lax
Response.Cookies.Add(cookie)
End If
另外设置SameSiteMode.None
无效。可能是为了强制要求此Cookie源自同一站点。
为什么?
我仍然不完全理解为什么会这样,因为如果在web.config中进行设置
<httpCookies httpOnlyCookies="true" sameSite="Lax" requireSSL="true" />
然后,您新创建的Cookie在Chrome中被标记为“宽松”,更改设置如下所示:
但是,如果您现在尝试从其值后面的代码中读取该cookie,则会将其删除。 不是这种情况,您是在后面的代码中专门设置了它。
我不确定是什么使Cookie有所不同,并且更可能是.NET处理此问题的方式。
关于此答案的任何其他信息都会吸引人。
,从2020年8月11日起,Chromium现在针对具有SameSite Cookie更改的100%用户。 (来源:https://www.chromium.org/updates/same-site)
SameSite Cookies常见问题解答:https://www.chromium.org/updates/same-site/faq
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。