如何使用php和javascript从不同的域获取cookie

如何使用php和javascript从不同的域获取cookie,php,javascript,ajax,cookies,Php,Javascript,Ajax,Cookies,假设我在first.com中设置了一个cookie,比如user。现在我想通过javascript和ajax阅读second.com中的cookie。但它不工作。我得到了xmlHttp.status=0 示例代码 在第二个域readcookie.php文件中 var xmlHttp; function createXMLHttpRequest(){ if(window.ActiveXObject) xmlHttp=new ActiveXObject

假设我在first.com中设置了一个cookie,比如user。现在我想通过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);
        }
    }
if(isset($_COOKIE['user'])){
        echo $_COOKIE['user'];
    }
    else{
        setcookie('user','a2345',0);
        echo $_COOKIE['user'];
    }
在第一个域cookie.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);
        }
    }
if(isset($_COOKIE['user'])){
        echo $_COOKIE['user'];
    }
    else{
        setcookie('user','a2345',0);
        echo $_COOKIE['user'];
    }

您无法从另一个域读取Cookie-结束

我能想到的唯一方法是在第二个域中添加一些代码,为您获取cookies,然后将其放在第一个域的页面中,在iframe中


您显然需要完全访问这两个域才能执行此类操作。

您的问题是浏览器不允许javascript访问不同的域。加:

header('Content-type: text/html');    
header('Access-Control-Allow-Origin: *');   
行到cookie.php的开头,它就可以工作了。
尽管如此,你还是无法得到饼干(或者至少在Chrome中)。我还不知道为什么。似乎chrome为javascript创建了一个新会话,并且不允许该会话访问以前的cookie。就像HttpOnly一样

我们可以安排first.com指定它的Cookie可以被second.com读取吗?为什么我们不能使用脚本语言从另一个域读取Cookie?出于安全原因。如果你可以从其他域读取cookie,那么你访问的每个站点都可以访问你电脑上的每个cookie。那么“安全原因”就可以了。但我想我们可以使用一些脚本语言或ActiveX之类的东西,按语法访问其他cookie!您只能从cookie所属的域访问cookie。如果您有权访问第二个域,那么您可以创建一个脚本,为您获取值并使用它。唯一的方法是你可以访问第二个域名。请看上面的Nobita链接-这正是我所说的。