2012-01-12 15 views
11

Załóżmy, że mam plik cookie ustawiony w first.com say user. Teraz chcę przeczytać to ciasteczko w second.com przez javascript i ajax. Ale to nie działa. Mam xmlHttp.status = 0.Jak uzyskać pliki cookie z innej domeny za pomocą php i javascript

przykładowy kod

w pliku readcookie.php druga domena

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); 
     } 
    } 

w pliku cookie.php pierwsza domena

if(isset($_COOKIE['user'])){ 
     echo $_COOKIE['user']; 
    } 
    else{ 
     setcookie('user','a2345',0); 
     echo $_COOKIE['user']; 
    } 
+0

zobacz http://stackoverflow.com/questions/402348/getting-setting-cookies-on-different-domains-with-javascript-or-other – Nobita

+0

Czy możemy zorganizować, że first.com określi, że to pliki cookie można przeczytać przez second.com? –

Odpowiedz

16

nie można odczytać pliki cookie z innej domeny - koniec.

Jedyny sposób, jaki mogę wymyślić to dodanie kodu do drugiej domeny, która pobiera pliki cookie, a następnie umieszczenie go na stronie w 1. domenie w elemencie iframe.

Oczywiście potrzebujesz pełnego dostępu do obu domen, aby móc robić tego rodzaju rzeczy.

+0

dlaczego nie możemy czytać plików cookie z innej domeny przy użyciu języków skryptowych? – Pratik

+0

http://stackoverflow.com/a/402354/368472 – Pratik

+5

Ze względów bezpieczeństwa. Jeśli możesz czytać pliki cookie z innych domen, każda odwiedzana witryna będzie miała dostęp do wszystkich plików cookie na Twoim komputerze. – Archer

8

Twoim problemem jest to, że przeglądarki nie zezwalają javascriptowi na dostęp do innej domeny. Dodaj:

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

linie do początku pliku cookie.php i będzie działać. Mimo to nie otrzymasz pliku cookie (lub przynajmniej w Chrome). Nie mogłem jeszcze zrozumieć dlaczego. Wygląda na to, że chrome tworzy nową sesję dla javascript i nie pozwoli, aby sesja uzyskała dostęp do poprzednich plików cookie. Jak HttpOnly.

Powiązane problemy