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的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 IE 9 中丢失了有关 Ajax 请求的 cookie 和会话
Facebook Safari会话问题-Safari Iframe Set Cookie