iframe Safari 中的跨域 cookie

Posted

技术标签:

【中文标题】iframe Safari 中的跨域 cookie【英文标题】:Cross-domain cookies in iframe Safari 【发布时间】:2012-10-08 16:02:47 【问题描述】:

我在 iframe(从另一个域加载网站)中设置 cookie 时遇到问题。 在我的网站 X.COM 上,我加载了 <iframe src='Y.COM'>

Y.COM 尝试设置 cookie,但 Safari 阻止了它们,因为该站点以前没有访问过。所以加载 Y.COM 失败,因为没有 cookie 就无法工作。有没有办法解决这个问题?

附:我无法修改 Y.COM 的任何数据。

附言我们也可以修改Safari的设置-"Accept cookies" = "Always",但这对我来说不是解决方案-似乎不可能引导每个用户都这样做..

【问题讨论】:

我认为阻止它的重点是它不应该工作。创建解决方法将违反用户的信任。 所以有人会访问您的网站,而您网站的页面会在另一个网站上加载一个页面,并且会将 cookie 传输到用户从未请求过的网站?我希望 Safari 和其他所有人也能阻止它。 @JamesMohler,我不相信他是说 X.COM sends cookie 到 Y.COM,只是 Y.COM 需要 cookie 才能运行,并且当加载到iframe 无法设置它们。 这个答案可能会有所帮助:***.com/a/6139648/160565 【参考方案1】:

我尝试了一个类似的问题。一个网络“父”页面在 jquery fancybox i-frame 跨域中打开我的“子”网站。 Explorer、Chrome、Firefox、Opera 甚至 Mac 上的 Safari (5.8.1) 都没有问题。但是对于 iPhone、iPad 和 mini iPad,i-frame 中的会话会丢失。

这意味着每次点击 i-frame 中的元素(网站是 aspx)都会启动一个新会话。

我们以非常简单的方式解决问题:

当父网站启动时,它直接调用子网站中的页面(而不是在 i-frame 中)。在这个页面中,我只是设置了一个会话变量,然后我重定向到了父网站。现在,当子网站在 iframe 中打开时,会话会保留。

【讨论】:

像魅力一样工作。我在 iframed 页面中呈现了一个链接,例如 <a href="/path/to/redirect_with_session?to=<%= request.referrer %>" target="_top" style="display:none;"></a>。然后立即用JS点击它:$('a')[0].click()。然后我的服务器上的路由/path/to/redirect_with_session 只需设置一个会话标志session['_ready'] = true,然后重定向回params[:to]。然后我可以决定是否只在它是 safari 并且会话尚未初始化时才执行此重定向流。

以上是关于iframe Safari 中的跨域 cookie的主要内容,如果未能解决你的问题,请参考以下文章

iframe、跨域 cookie、p3p 策略和 safari 错误:未提供所需的防伪令牌或无效

没有第三方 cookie 的跨域用户跟踪?

记一次uwsgi导致的跨域问题

了解 iframe 中的跨域问题

Safari 中的跨域资源共享策略拒绝了跨域重定向

具有 ACS 身份验证的 azure 开发中的跨域 cookie