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的主要内容,如果未能解决你的问题,请参考以下文章