iframe偶尔会丢失会话Cookie

时间:2020-01-15 18:01:33

标签: asp.net-mvc iframe session-cookies payment-gateway session-state

有时,在iframe中提交付款表单时,由于请求缺少ASP.NET_SessionId cookie(我们使用状态服务器),因此付款网关的回发导致用户被注销。不是因为我检查了那些日志而导致应用程序池回收导致问题。它也仅在生产环境中发生。我可以看到会话cookie刚好在提交表单之前就存在,所以我无法弄清楚丢失它的位置。

1 个答案:

答案 0 :(得分:2)

您需要检查是否不受最近推出的KB4524420的影响:

当HttpCookie.SameSite值设置为“ None”时,ASP.NET现在将发出SameSite cookie标头,以适应即将在Chrome中对SameSite cookie处理进行的更改。作为此更改的一部分,尽管可以在web.config中覆盖这些值,但FormsAuth和SessionState cookie还将使用SameSite ='Lax'发出,而不是以前的默认值'None'。

您必须在会话状态标签中设置cookieSameSite =“ None”以避免发生此问题。

<sessionState cookieSameSite="None"  cookieless="false" timeout="360"> 
</sessionState>

但是,这在某些情况下会破坏Safari(v13之前的iOS和MacOS中的Safari),因此您可能需要考虑添加两个cookie,一个cookie的SameSite = None,另一个不为SameSite指定任何值。这是由于Safari中的错误导致SameSite = None变为SameSite = Strict。