как получить куки из другого домена с помощью php и javascript - PullRequest
12 голосов
/ 12 января 2012

Предположим, у меня есть файл cookie, установленный в first.com скажем, пользователь.Теперь я хочу прочитать этот cookie на second.com через javascript и ajax.Но это не работает. У меня есть 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'];
    }

Ответы [ 2 ]

16 голосов
/ 12 января 2012

Вы не можете читать куки с другого домена - конец.

Единственный способ, которым я могу придумать, - это добавить некоторый код во 2-й домен, который получает файлы cookie для вас, а затем разместить его на странице в 1-м домене в фрейме iframe.

Очевидно, что вам нужен полный доступ к обоим доменам, чтобы делать подобные вещи.

8 голосов
/ 22 октября 2012

Ваша проблема в том, что браузеры не позволяют javascript обращаться к другому домену. Добавить:

header('Content-type: text/html');    
header('Access-Control-Allow-Origin: *');   

строки в начале cookie.php, и это будет работать. Тем не менее, вы не получите cookie (или, по крайней мере, в Chrome). Я еще не мог понять, почему. Кажется, что chrome создает новый сеанс для JavaScript и не позволяет этому сеансу получать доступ к предыдущим файлам cookie. Вроде HttpOnly.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...