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附带了保守的cookie策略,该策略将cookie写入仅限于用户选择("导航到")的页面.此默认保守策略可能会混淆尝试写入cookie并失败的基于帧的站点.
我发现无法解决这个问题.
如果它有价值,Chrome也不会设置Cookie,如果您使用<script
>追加方法,但如果您有隐藏<img
>具有相同来源,Chrome除了其他浏览器外还可以使用(除了Safari之外)
Ale*_*art 13
这是一个有效的解决方案:
http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/
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)。
归档时间: |
|
查看次数: |
86774 次 |
最近记录: |