猿问
下载APP

在Safari中设置跨域Cookie

我必须从域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);

这会在我测试过的所有浏览器(Safari除外)上在A.com上设置Cookie。令人惊讶的是,即使没有P3P标头,它也可以在IE6中使用。


有什么办法可以使它在Safari中工作吗?


慕慕0277861
浏览 171回答 3
3回答

慕仰1329654

来自Safari Developer FAQ:Safari附带了一种保守的cookie策略,该策略将cookie写入限制为仅用户选择的页面(“导航到”)。此默认的保守策略可能会使尝试编写cookie并失败的基于框架的站点混乱。我没有办法解决这个问题。如果值钱,如果您使用<script>附加方法,Chrome也不会设置cookie ,但是如果您<img使用相同的来源隐藏了>,则Chrome可以与其他浏览器一起使用(再次是Safari)

斯蒂芬大帝

这是一个可行的解决方案:http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/

MYYA

对于2015年的这项工作,有一个适当的解决方法。假设有y.com网站,其中包括iframe和x.com网站。x.com iframe希望存储Cookie。Safari策略不允许这样做,但是y.com可以存储它。因此,y.com必须侦听来自x.com的消息,然后存储cookie本身。var _cookieEvMth = window.addEventListener ? "addEventListener" : "attachEvent";var _cookieEvAction = window[_cookieEvMth];var _cookieEv = _cookieEvMth == "attachEvent" ? "onmessage" : "message";_cookieEvAction(_cookieEv, function(evt){&nbsp; if(evt.data.indexOf('cookieset')!=-1){&nbsp; &nbsp; var datack = evt.data.split('|');&nbsp; &nbsp; YOUR_CUSTOM_COOKIE_SAVE_METHOD(datack[1],datack[2],datack[3]);&nbsp; }},false);当x.com需要存储cookie时,它必须向y.com发布一条消息:window.parent.postMessage('cookieset|'+ckName+'|'+ckVal+'|'+days,'*');如果您想读取Cookie,也可以尝试将消息发布到iframe。或者,您可以使用javascript将其作为参数包含在x.com iframe网址中:iframe.setAttribute('url','x.com/?cookieval='+YOUR_COOKIE_GET_METHOD('cookiename'));
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答