第三方会话cookie在iframe中丢失
我们有一个网站(www.example.com),它将用户发送到一系列第三方页面来验证付款详情,我们在iframe中执行此操作。 最初,来自www.example.com的本地页面被加载到iframe中,并且用户被重定向到第三方URL。 一旦用户完成了第三方步骤,他们就会被重定向回到我们网站(www.example.com)中的iframe内的页面。
这适用于我们测试过的所有浏览器,除IE 11外,我们的cookies似乎丢失了。 我们已经在Windows 7和8.1下同时在桌面和“Metro”模式下进行了检查,问题在所有版本中。
当用户浏览我们的网站时,我们设置了一个会话cookie,该cookie被正确发送到最初加载到iframe中的第一方页面。 但是,一旦用户浏览了此iframe中的某些第三方页面,会话cookie将不会随下一个请求一起发送。
如果我们将IE 11的隐私设置设置为最低值,则此问题将消失,并且事情按预期工作。
到目前为止,所有可能的解决方案都与P3P标题相关。 我们有一个有效和正确的P3P标头和XML策略文件的设置,并且这个问题只发生在IE 11中。
更新:我们有一些使用JS设置的其他cookie。 这些都如预期般持续下去。 区别在于有效期限(JS cookie 1年,session cookie 1个月),域名(JS cookie明确为“example.com”,session cookie为空)以及它们是否为“仅HTTP”(JS为false) cookies,对于会话cookie为true)。
我已经尝试根据会话cookie的JS cookie设置所有这些选项,但它没有区别。
更新2:经过更多测试后,我一直无法创建重现此问题的测试用例。 然而,我尝试在实时代码中进行测试的任何附加cookie也显示为中断,即使它们的JS代码与JS的代码完全相同。 简而言之; 我还没有找到任何工作和不工作的饼干模式。
一个可能有趣的事情要注意的是,Cookie不会被删除,他们只是没有被发送到最终的请求。 如果另一个页面被加载,cookie会奇迹般的重新出现并被发送; 这导致我相信这是一个围绕iframe和P3P的bug。
更新3(第3天): IE 11处理cookies仍然让我感到困惑。 我进入微软迷宫的路越远,我就越是迷失在自己的移动墙之中。 这里有幽灵。 这些半梦见的安全政策碎片已经把自己编织成了一些空灵的生物,它一举一动跟踪和嘲弄我。 起初,我惊呆了,惊恐地看到几乎看不见的模糊不清的形态,但随着时间的推移,我仅仅从其接近的知识中获得更多的安慰。 难道这是我被派到这里面对的野兽吗? 我怎么能在这种时候杀死我唯一的同伴?
我们遇到了与Internet Explorer 11类似的问题,在通过https重定向后会话cookie丢失。
请求链看起来像这样:
初始请求到/ - >会话cookie设置- >重定向到外部URL - >重定向回(会话cookie丢失)
我们的问题是由于根据RFC952的主机名无效,我们在我们的测试服务器URL中强调了这一点。 如果URL不符合RFC952,Internet Explorer似乎会在通过https重定向时自动丢弃会话cookie。 当使用破折号而不是下划线时,一切都按预期工作。
最初的解决方案在2004年asp.net blogpost的更新2部分中找到。相关的microsoft bug ticket在这里。
希望这会帮助某人。
我注意到,当IE7兼容模式被用于新页面时,会话cookie通常会丢失。 我想这同样适用于iframe。 iframe是否发送与父页面不同的X-UA兼容标头值,或者与会话中的较早版本不同? 就像也许你的会话以IE = edge开始,并且iframe页面将它设置为IE = 7。 如果是这样,IE浏览器似乎为兼容模式页面和会话cookie启动了一个新的IE PID(但似乎不会被传输。
我遇到了与此主题相同的问题。
我们的网站放置在iframe中,并使用会话cookie(asp.net_session)。 虽然在网站导航没有问题(cookie正在工作并附加到请求标头)。 但是,当我们将客户重定向到另一个网站(othersite.com),然后othersite.com将客户重定向到我们的域名并强制其打开为“_top”时,浏览器不会向请求发送Cookie,以致我们丢失了客户会话。 这个问题只发生在IE上。
你有什么建议来解决这个问题。
链接地址: http://www.djcxy.com/p/57467.html上一篇: party session cookies being lost in iframe
下一篇: Third party cookies and facebook app inside an iframe, getUser fails