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

man*_*shb 12 javascript php cookies ajax

假设我在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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

在第一个域cookie.php文件中

if(isset($_COOKIE['user'])){
        echo $_COOKIE['user'];
    }
    else{
        setcookie('user','a2345',0);
        echo $_COOKIE['user'];
    }
Run Code Online (Sandbox Code Playgroud)

Arc*_*her 16

您无法从其他域读取Cookie - 结束.

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

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

  • 出于安全考虑.如果您可以从其他域读取cookie,那么您访问的每个站点都可以访问您PC上的每个cookie. (5认同)

Sem*_*mir 8

您的问题是浏览器不会让javascript访问不同的域.加:

header('Content-type: text/html');    
header('Access-Control-Allow-Origin: *');   
Run Code Online (Sandbox Code Playgroud)

行到cookie.php的开头,它会工作.不过,你不会得到cookie(或者至少在Chrome中).我还不知道为什么.似乎chrome为javascript创建了一个新会话,并且不会让该会话访问以前的cookie.像HttpOnly一样.