Cookies 如何在Safari的iFrame中设置来自外部域的Cookie?

Cookies 如何在Safari的iFrame中设置来自外部域的Cookie?,cookies,iframe,safari,Cookies,Iframe,Safari,从苹果 狩猎船上有一艘保守的船只 限制cookie的cookie策略 仅写入选定的页面 (“导航到”)由用户执行 默认情况下,Safari只允许来自您直接导航到的站点的cookie。(即,如果您单击带有该域名url的链接) 这意味着,如果您从自己的站点加载带有iFrame的页面,并且该页面来自另一个站点,则另一个站点无法设置cookie。(例如,售票处)。一旦您直接访问了另一个域,另一个站点就可以访问并更改其自己的cookie 如果无法访问其他站点上的代码,我如何才能使用户体验尽可能不具威胁性

从苹果

狩猎船上有一艘保守的船只 限制cookie的cookie策略 仅写入选定的页面 (“导航到”)由用户执行

默认情况下,Safari只允许来自您直接导航到的站点的cookie。(即,如果您单击带有该域名url的链接)

这意味着,如果您从自己的站点加载带有iFrame的页面,并且该页面来自另一个站点,则另一个站点无法设置cookie。(例如,售票处)。一旦您直接访问了另一个域,另一个站点就可以访问并更改其自己的cookie

如果无法访问其他站点上的代码,我如何才能使用户体验尽可能不具威胁性

是否有(javascript?)方法检查其他站点的cookie 是否已设置,并相应地,如果需要,首先显示到其他站点的直接链接

更新:

HTML5功能“window.postmessage”似乎是一个不错的解决方案。
有一些jQuery库可能会有所帮助,并且与最新的浏览器兼容。
本质上,iFrame文档通过window元素发送带有Json的消息

daepark附近的一家非常不错的酒店,我在那里工作。

另一个是本·阿尔曼写的,我发现了,但还没有测试。

这是一个被称为同源政策的问题。从本质上说,这是一种防止造成安全漏洞的安全措施

当您有一个iframe指向您自己域中的页面时,JavaScript可以访问您所在的页面和iframe中的页面。这是一种可接受的父子关系和父子关系

 (parent doc)        (iframe doc)
    HTML --> IFRAME <-- HTML 
      ^--------|---------^
(父文档)(iframe文档)
HTML-->IFRAME IFRAME建议在页面中放置一些javascript,以检测是否缺少始终存在的cookie。当它发现cookie尚未设置时,会将所需的会话数据发布到设置cookie的页面,并将您重定向回原始页面

显然,这篇文章足以满足Safari的“我是否已导航到此域”测试,因此从那时起,它接受来自该域的cookie


当然,这不是最好的代码,但很可能会解决您的问题。

一个解决方案(有点混乱)可能是让父页面检查cookie是否存在,如果cookie不存在,则在iframe页面的域上运行一个AJAX调用脚本来设置cookie。

这是Safari中显示的facebook应用程序的常见问题。许多人(包括我自己)处理这个问题的方式是将iframed页面发布到自己。当页面发布表单数据时,允许其设置cookie。最后,它可以刷新1页,甚至可以是您的用户登录帖子

localStorage由safari和所有现代浏览器支持,即使在加载到iFrame的页面上也允许读/写操作。如果您不介意放弃对ie6和ie7的支持,请尝试在框架站点中使用localStorage而不是Cookie。我知道您的问题明确指出您无权访问框架站点上的代码,但对于那些有权限访问框架站点的人来说,localStorage无疑解决了“safari iframe中没有Cookie”的问题。

我也看到了这个问题,但我相信这个问题仅限于不安全的Cookie。有人能证实吗?nvm你的回答有点太笼统了,但有道理。SOP将阻止您检查Cookie是否也存在。我目前的解决方法是首先在iframe中加载一个本地页面,并带有指向外部页面的链接。这样,访问者必须“导航”到该页面,然后该站点才允许使用cookie。我想知道外部页面是否已经拥有cookie权限,这样我就可以跳过首先加载本地页面并直接显示外部页面。有人尝试过这一点吗(使用AJAX帖子而不是整页刷新帖子)?这就足够了吗?我无法让AJAX帖子正常工作,但实际上,您可以通过简单的get/重定向返回到您所在的位置。请参阅此答案和我的评论:
 (parent doc)        (iframe doc)
    HTML --> IFRAME <-- HTML 
               X