iframe 偶尔会丢失会话 cookie

Posted

技术标签:

【中文标题】iframe 偶尔会丢失会话 cookie【英文标题】:Iframe occasionally loses session cookies 【发布时间】:2020-05-02 13:26:40 【问题描述】:

有时在 iframe 中提交支付表单时,来自支付网关的回发会导致用户被注销,因为请求缺少 ASP.NET_SessionId cookie(我们使用的是状态服务器)。我检查了这些日志,这不是导致问题的应用程序池回收。它也只发生在生产环境中。我可以看到会话 cookie 在表单提交之前就存在,所以我不知道它在哪里丢失。

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

不幸的是,这种方法不走运。回发请求中仍然缺少 cookie。 帮助我解决了 SharePoint Online 应用程序 Webpart 在 iframe 中丢失会话 cookie 中的类似问题。谢谢

以上是关于iframe 偶尔会丢失会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章

php会话数据有时会丢失

iframe 中的 laravel 应用程序不断刷新会话

为啥我在 IE 9 中丢失了有关 Ajax 请求的 cookie 和会话

Facebook Safari会话问题-Safari Iframe Set Cookie

Safari / Webkit智能跟踪预防(ITP)打破了在iframe中运行的应用程序

Nginx 会话保持