在Safari中设置跨域cookie

Luc*_*eis 61 javascript cookies safari cross-domain cross-site

Evernote的书签能够做到这一点,因此即使赏金将以非生产性的方式进行,最受欢迎的答案也不会回答这个问题.

我必须从域B.com调用域A.com(使用http设置cookie).我在域名B.com上所做的就是(javascript):

var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "A.com/setCookie?cache=1231213123";
head.appendChild(script);
Run Code Online (Sandbox Code Playgroud)

这会在我测试的每个浏览器上设置A.com上的cookie,但Safari除外.令人惊讶的是,即使没有P3P标头,这也适用于IE6.

有没有办法在Safari中使这项工作?

Pao*_*ino 59

来自Safari Developer FAQ:

Safari附带了保守的cookie策略,该策略将cookie写入仅限于用户选择("导航到")的页面.此默认保守策略可能会混淆尝试写入cookie并失败的基于帧的站点.

我发现无法解决这个问题.

如果它有价值,Chrome也不会设置Cookie,如果您使用<script>追加方法,但如果您有隐藏<img>具有相同来源,Chrome除了其他浏览器外还可以使用(除了Safari之外)

  • 它被投了票,因为它是正确的答案,如果没有完整页面重定向到第三方域,您无法在Safari中执行所请求的操作. (2认同)

Ale*_*art 13

这是一个有效的解决方案:

http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/

  • @streetlight - 你是对的,该博客文章的作者在此确认这不再有效:http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/#comment-924880962 (8认同)
  • 我的印象是,在整个'谷歌入侵Safari for ads'之后,这个漏洞已经在Webkit中被关闭了 (3认同)
  • 它确实有效,但你不能通过javascript创建cookie,它必须由服务器在表单的响应上创建.+1 (2认同)

DrS*_*lis 12

这可能不适用于所有人,但我遇到了这个问题,因为我从与 API 不同的主机提供 React 应用程序,最终有效的解决方案是使用 DNS:

我们的客户从 www.company-name.com 获得服务,我们的 API 位于 company-name.herokuapp.com。通过创建CNAME记录 api.company-name.com --> company-name.herokuapp.com,并让我们的客户端使用该子域进行 API 调用,Safari 不再将其视为“第三方”cookie。

好处是涉及的代码很少,而且都使用成熟的东西......缺点是如果您要使用https,则需要对API主机进行一些控制/所有权-他们需要有效的证书对于客户端域,否则用户将收到证书警告 - 因此,如果有问题的 API 不是您的或合作伙伴的,这将不起作用(至少不适用于面向最终用户的 API)。


MKN*_*ons 6

工作方法2014-2016:

你必须做window.open到域/分配cookie /关闭弹出窗口,域现在已经安全.

原帖@ PHP多个cookie无法在iPad/iPhone浏览器上运行