最近samesite = lax自动添加到我的会话Cookie中!
此属性仅添加到sessionID中:
"Set-Cookie ASP.NET_SessionId=zana3mklplqwewhwvika2125; path=/; HttpOnly; **SameSite=Lax**"
我的网站托管在IIS 8.5,Windows 2012 R2上,并且没有WAF或UrlRewrite,因此我删除了AntiVirus(kasper)。
但在某些客户服务器上仍然存在相同的问题。
有什么主意吗?
已编辑: 我发现这个: https://support.microsoft.com/en-us/help/4524419/kb4524419
当HttpCookie.SameSite值设置为“ None”时,ASP.NET现在将发出SameSite cookie标头,以适应即将在Chrome中对SameSite cookie处理进行的更改。作为此更改的一部分,尽管可以在web.config中覆盖这些值,但FormsAuth和SessionState cookie也将以SameSite ='Lax'发出,而不是以前的默认值'None'。
如何在web.config中为SessionState覆盖相同站点的cookie?
我添加了这一行,但不适用于SessionID cookie!
<httpCookies sameSite="Unspecified" />
通过SessionState标记的“ cookieSameSite”属性为状态服务器设置相同站点。
答案 0 :(得分:19)
CookieSameSite属性不适用于许多较旧的框架。如果您的环境中不支持接受的答案,请继续阅读!
我对几个SO答案进行了修改,以提供此URL重写,该URL重写为会话cookie添加了SameSite=None
,并且对于大多数不兼容的浏览器,还从 all cookie中删除了SameSite=None
。重写的目的是保留Chrome 80之前的“旧版”行为。
我的Coder Frontline blog中的全部文章:
<rewrite>
<outboundRules>
<preConditions>
<!-- Checks User Agent to identify browsers incompatible with SameSite=None -->
<preCondition name="IncompatibleWithSameSiteNone" logicalGrouping="MatchAny">
<add input="{HTTP_USER_AGENT}" pattern="(CPU iPhone OS 12)|(iPad; CPU OS 12)" />
<add input="{HTTP_USER_AGENT}" pattern="(Chrome/5)|(Chrome/6)" />
<add input="{HTTP_USER_AGENT}" pattern="( OS X 10_14).*(Version/).*((Safari)|(KHTML, like Gecko)$)" />
</preCondition>
</preConditions>
<!-- Adds or changes SameSite to None for the session cookie -->
<!-- Note that secure header is also required by Chrome and should not be added here -->
<rule name="SessionCookieAddNoneHeader">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*ASP.NET_SessionId.*)" />
<!-- Use this regex if your OS/framework/app adds SameSite=Lax automatically to the end of the cookie -->
<!-- <match serverVariable="RESPONSE_Set-Cookie" pattern="((.*)(ASP.NET_SessionId)(=.*))(?=SameSite)" /> -->
<action type="Rewrite" value="{R:1}; SameSite=None" />
</rule>
<!-- Removes SameSite=None header from all cookies, for most incompatible browsers -->
<rule name="CookieRemoveSameSiteNone" preCondition="IncompatibleWithSameSiteNone">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=None)" />
<action type="Rewrite" value="{R:1}" />
</rule>
</outboundRules>
</rewrite>
这应该适用于大多数ASP .Net和ASP .Net Core应用程序,尽管较新的Frameworks具有适当的代码和配置选项可让您控制此行为。我建议您在使用上面的重写之前,先研究所有可用的选项。
答案 1 :(得分:6)
@zemien您的解决方案正确解决了我们的Google chrome问题
我们有一个集成,其中我们的应用程序嵌入到第三方的iframe中。 2020年2月4日发布的Chrome版本80阻止了cookie的加载。
但是我必须修改模式以捕获所有cookie,添加Secure标志,并且要不对本地的非https环境在本地主机上应用重写
<rule name="SessionCookieAddNoneHeader">
<match serverVariable="RESPONSE_Set-Cookie" pattern="(.*)(SameSite=.*)?" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />
</conditions>
<action type="Rewrite" value="{R:1}; SameSite=None; Secure" />
</rule>
答案 2 :(得分:4)
为我工作。 添加到我的web.config文件中:
<sessionState cookieSameSite="None"></sessionState>
升级到.Net Framework 4.8 +安装补丁: 2019-12适用于Windows 10版本1909 x64的.NET Framework 3.5和4.8的累积更新(KB4533002)
答案 3 :(得分:2)
我无法使用重写,因为未在所有客户服务器上安装UrlRewrite。
最后,我将cookieSameSite添加到我的web.config:
<sessionState mode="StateServer" cookieSameSite="None" sqlConnectionString="data source=(local);user id=sa;password=" cookieless="false" timeout="20" />
答案 4 :(得分:2)
将这些选项添加到web.config中,以确保sameSite = None,Lax或Strict
<system.web>
<httpCookies sameSite="None"/>
<sessionState cookieSameSite="None" />
<authentication mode="Forms">
<forms cookieSameSite="None" />
</authentication>
答案 5 :(得分:1)
对于web.config中的ASP.NET_SessionId,可以使用SameSite = None将SameSite = Lax替换为:
<rewrite>
<outboundRules>
<rule name="AddSameSiteCookieFlag">
<match serverVariable="RESPONSE_Set-Cookie" pattern="((.*)(ASP.NET_SessionId)(=.*))(SameSite=Lax)" />
<action type="Rewrite" value="{R:1};SameSite=None" />
</rule>
</outboundRules>
</rewrite>
答案 6 :(得分:1)
4台带有谷歌浏览器的计算机无法在ASP上的网站上使用Cookie。 Folow H. J. van der Wijk的web.config信息
<system.web>
<httpCookies sameSite="None"/>
<sessionState cookieSameSite="None" />
<authentication mode="Forms">
<forms cookieSameSite="None" />
</authentication>
仍然不起作用,必须进行更改
<httpCookies sameSite="None"/>
为
<httpCookies httpOnlyCookies="true" requireSSL="true" sameSite="None"/>
一切正常。
谢谢