根据Google Chrome的最新更新,它仅允许具有属性的跨平台Cookie
sameSite=None
链接:https://docs.microsoft.com/en-us/aspnet/samesite/system-web-samesite#net-versions-earlier-than-472
根据上图,Microsoft不为低于4.7.2的较低版本提供此属性的内置支持。
因此,我们无法在服务器端创建cookie时进行设置。
我们可以使用SameSite属性创建cookie吗?
答案 0 :(得分:6)
假设您已经安装了IIS的URL Rewrite Extension 2.0(Azure App Services, nee Azure网站,已经安装了此服务)then you should look at @sreenath's answer,因为该解决方案应该适合大多数用户。
但是(在我的象牙塔中位于巨大的自我泡沫中的特权位置)中没有任何理由不使用.NET Framework 4.7.2的任何项目或更高版本,因为过去5年以上的.NET Framework更新(从Visual Studio 2013开始)在很大程度上是可加和向后兼容的。 因此,我强烈敦促开发人员首先(尝试)将其项目更新到.NET Framework 4.7.2或4.8 ,然后再尝试使用IIS Rewrite设置SameSite
cookie参数之类的黑客手段。 >
如何为4.7.2(对于4.5.2)的.Net Framework设置cookie属性Samesite = None
简单地说:不能。
The article you linked to解释了为什么(强调我的意思):
Microsoft不支持低于4.7.2的.NET版本来写入同站点cookie属性。我们没有找到了一种可靠的方法:
- 确保根据浏览器版本正确编写属性。
- 在较早的框架版本上拦截并调整身份验证和会话cookie
唯一的解决方案是将项目升级到.NET Framework 4.7.2或更高版本。
但是,好消息是,从.NET Framework 4.5升级到4.7.2非常容易,并且存在最小的向后兼容性问题(如果有的话)。您甚至不必更改web.config
文件中的任何内容(即您仍然可以将ASP.NET WebForms 4.5与.NET Framework 4.8结合使用)。
您需要做的是:
.csproj
文件。<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
更改为<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
根据我的经验,您遇到的唯一问题是:
packages
目录即可。)当然,我仍然会责骂您产品的经理,因为他们不能确保他们的项目在七年 中保持正常运行(如.NET Framework 4.5。 2已于2013年发布)。为什么没有CI管道设置来自动处理此问题?
答案 1 :(得分:2)
您可以通过使用IIS URL重写模块来实现。这需要您在服务器本身上安装该模块,但这将为您提供希望的解决方案。
<rewrite>
<outboundRules>
<clear />
<rule name="Add SameSite" preCondition="No SameSite">
<match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
<action type="Rewrite" value="{R:0}; SameSite=none;" />
<conditions>
</conditions>
</rule>
<preConditions>
<preCondition name="No SameSite">
<add input="{RESPONSE_Set_Cookie}" pattern="." />
<add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=none;" negate="true" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>