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时,其显示如下。

enter image description here

更新设置并再次调用上述代码后,值将被删除。

enter image description here


这仅在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中被标记为“宽松”,更改设置如下所示:

enter image description here

但是,如果您现在尝试从其值后面的代码中读取该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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...