因 Cookie 被添加了 SameSite=None 属性导致在非 https 环境下无法为网站正确设置 Cookie 进而导致系统状态异常的问题
这个错误很隐蔽,因为它不会出现在控制台的报错中,只会在 POST 请求响应头的 Set-Cookie 后面有一个黄色感叹号,鼠标放上去才能看到以下提示。
尝试通过 Set-Cookie 标头设置 Cookie 的操作被禁止了,因为此标头具有"SameSite=None"属性但缺少使用"SameSite=None"所需的"Secure"属性。
示例:
但是很奇怪,代码层面并没有添加相关内容,且目前在大多数环境中都没有出现这个问题。
经过询问 ChatGPT 得知,有一个补丁 KB4533013 更改了 .NET Framework 4.7.2 的默认行为,默认添加了该属性。
但看到该补丁是 2019 年 12 月发布的,不知为何最近才暴露问题。
最好的处理是根据情况选择合适的 SameSite 配置,或使用 https 协议提供服务。
还有一种就是还原该行为到之前的状态,在 Web.config 文件中添加以下配置:
<configuration>
<appSettings>
<add key="aspnet:SuppressSameSiteNone" value="true" />
</appSettings>
<system.web>
<authentication>
<forms cookieSameSite="None" />
</authentication>
<sessionState cookieSameSite="None" />
</system.web>
</configuration>
参考来源:
https://blog.csdn.net/G_king_/article/details/141753617
https://support.microsoft.com/zh-cn/topic/december-10-2019-kb4533013-cumulative-update-for-net-framework-3-5-and-4-7-2-for-windows-10-version-1809-and-windows-server-2019-80565f26-2594-210a-c45b-ec20ba095154
https://learn.microsoft.com/zh-cn/aspnet/samesite/system-web-samesite#reverting-net-472-behavior
输了你,赢了世界又如何...