【问题标题】:Cross-domain cookies in iframe Safariiframe Safari 中的跨域 cookie
【发布时间】: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 无法设置它们。
  • 这个答案可能会有所帮助:stackoverflow.com/a/6139648/160565

标签: iphone iframe cookies safari cross-domain


【解决方案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 并且会话尚未初始化时才执行此重定向流。
猜你喜欢
  • 2012-04-11
  • 2015-12-19
  • 2011-05-10
  • 2019-07-03
  • 2012-06-05
  • 2023-04-09
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多