使用javascript或其他方法在不同的域上设置cookie
-
03-07-2019 - |
题
在网上找不到任何特殊情况,所以我去... 我需要设置/获取存储在“first.com”中的cookie。在浏览“second.com”时,我可以完全访问“first.com”。但我只能在“second.com”上进行javascript访问(可以操作我想要的DOM)。
我的第一个方法是在second.com上创建一个iframe(使用js),加载一个像“first.com/doAjax?setCookie = xxx”这样的页面。并且做了一个ajax调用,说“first.com/setCookie?cookieData = xxx”这将把cookie设置在“first.com”上我们传递的数据。
在first.com上设置第二个网站上的cookie非常合适 - 为了获得一个cookie我基本上遵循相同的程序,创建了加载的iframe“first.com/doAjax?getCookie”那会做一个ajax调用来说“first.com/getCookie"它将读取first.com上的cookie信息并将其作为JSON对象返回。
问题是我无法将该JSON cookie对象带回“second.com”。所以我可以阅读它,也许我可以在使用“window.top”完成Ajax调用时将其带来。但是存在时间问题,因为它与iframe加载时无关。我希望我很清楚,并且想知道是否有一个更容易的解决方案,而不是这个疯狂的iframe-> ajax垃圾,似乎这甚至不能用于在SAFARI中获取cookie。
解决方案
您可以使用回调将脚本元素注入到文档的HEAD中,该回调将您需要的cookie传递给任何需要它的函数。
类似的东西:
<script type="text/javascript">
var newfile=document.createElement('script');
newfile.setAttribute("type","text/javascript");
newfile.setAttribute("src", 'http://first.com/doAjax?getCookie&callback=passCookie');
document.getElementsByTagName("head")[0].appendChild(newfile);
</script>
页面first.com/doAjax?getCookie可以这样做:
passCookie({'name':'mycookie', 'value':'myvalue'});
其他提示
将此PHP文件放入first.com:
//readcookie.php
echo 将此PHP文件放入first.com:
function readCookieCallback()
{
if ((this.readyState == 4) && (this.status == 200))
{
alert("the value of the cookie is: "+this.responseText);
}
else if ((this.readyState == 4) && (this.status != 200))
{
//error...
}
}
function buttonClickOrAnything()
{
var refreshObject = new XMLHttpRequest();
if (!refreshObject)
{
//IE6 or older
try
{
refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
return;
}
}
}
refreshObject.onreadystatechange = readCookieCallback;
refreshObject.open("GET", "http://www.first.com/readcookie.php");
refreshObject.send();
}
在second.com上,您可以使用此javascript获取值:
<*>
此致
罗伯特
COOKIE['cookiename'];
在second.com上,您可以使用此javascript获取值:
<*>此致 罗伯特
对于SETTING cookies,您可以按如下方式更改我的脚本:
新的PHP脚本:
//writecookie.php
setcookie(对于SETTING cookies,您可以按如下方式更改我的脚本:
新的PHP脚本:
function buttonClickOrAnything()
{
var refreshObject = new XMLHttpRequest();
if (!refreshObject)
{
//IE6 or older
try
{
refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
return;
}
}
}
refreshObject.open("GET", "http://www.first.com/writecookie.php?c=cookiename&v=cookievalue");
refreshObject.send();
}
JavaScript:
<*>
这适用于所有浏览器。
GET['c'], 对于SETTING cookies,您可以按如下方式更改我的脚本:
新的PHP脚本:
<*>
JavaScript:
<*>
这适用于所有浏览器。
GET['v']);
JavaScript:
<*>这适用于所有浏览器。