2012-10-18 243 views
8

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

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

P.S.我无法修改Y.COM上的任何数据。

P.S.S.此外,我们可以修改Safari的设置 - "Accept cookies" = "Always",但它不是我的解决方案 - 它似乎不可能导致每个用户做到这一点..

+0

我认为阻止它的关键是它不应该工作。创建解决方法将违反用户的信任。 –

+0

那么有人会去你的网站,并从你的网站的页面将加载在另一个网站上的页面,它会将cookie传递到用户从未请求的网站?我希望Safari和其他所有方面都能阻止。 –

+1

@JamesMohler,我不相信他在说X.COM *会将* cookies发送给Y.COM,只是Y.COM需要cookies才能起作用,并且在加载到iframe中时无法设置它们。 –

回答

4

我试验过类似的问题。网页“父母”页面打开我的“孩子”网站在jquery fancybox i-frame跨域。使用资源管理器,Chrome,Firefox,Opera甚至在Safari上使用Safari(5.8.1)都没问题。但是在iPhone,iPad和迷你iPad上,i帧中的会话丢失了。

这意味着,每次点击i帧中的元素(网站在aspx中)时,都会启动一个新会话。

我们解决问题的一个非常简单的方法:

当父网站开始,它直接调用页面的子站点(不在一个I帧)。在这个页面中,我只设置一个会话变量,然后重定向到父网站。现在,当子网站在iframe中打开时,会话将保留。

+0

工程就像一个魅力。我在我的iframed页面中提供了一个链接,如''。然后立即用JS:'$('a')[0] .click()'点击它。然后,我的服务器'/ path/to/redirect_with_session'上的路由只设置一个会话标志'session ['_ ready'] = true',然后重定向回''params [:to]'。然后,我可以决定是否仅在Safari浏览器和会话尚未初始化时执行此重定向流程。 – colllin