假设我在first.com中设置了一个cookie设置用户。现在我想通过javascript和ajax在second.com中读取该cookie。但它没有用。我有xmlHttp.status = 0。
示例代码
在第二个域readcookie.php文件
var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject)
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
if(window.XMLHttpRequest)
xmlHttp=new XMLHttpRequest();
}
function readcookie(){
createXMLHttpRequest();
xmlHttp.open("GET","http://www.first.com/cookie.php",true);
xmlHttp.onreadystatechange=getcookie;
xmlHttp.send(null);
}
function getcookie(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
var reply=xmlHttp.responseText;
if(reply){
alert(reply);
}
}
else
alert(xmlHttp.status);
}
}
在第一个域cookie.php文件中
if(isset($_COOKIE['user'])){
echo $_COOKIE['user'];
}
else{
setcookie('user','a2345',0);
echo $_COOKIE['user'];
}
答案 0 :(得分:16)
您无法从其他域读取Cookie - 结束。
我能想到的唯一方法是在第二个域中添加一些代码,为您获取Cookie,然后将其放在第一个域的页面中,在iframe中。
您显然需要完全访问这两个域才能执行此类操作。
答案 1 :(得分:8)
您的问题是浏览器不会让javascript访问不同的域。添加:
header('Content-type: text/html');
header('Access-Control-Allow-Origin: *');
行到cookie.php的开头,它会起作用。 不过,你不会得到cookie(或者至少在Chrome中)。我还不知道为什么。似乎chrome为javascript创建了一个新会话,并且不会让该会话访问以前的cookie。像HttpOnly一样。