2012-01-12 34 views
11

Giả sử tôi có một tập hợp cookie trong first.com cho biết người dùng. Bây giờ tôi muốn đọc cookie đó trong second.com thông qua javascript và ajax. Nhưng nó không hoạt động. Tôi đã có xmlHttp.status = 0.cách lấy cookie từ một tên miền khác với php và javascript

mẫu mã

trong lĩnh vực thứ hai tập tin 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); 
     } 
    } 

trong file cookie.php miền đầu tiên

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

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

+0

Chúng tôi có thể sắp xếp rằng first.com chỉ định rằng đó là cookie có thể được đọc bởi second.com? –

Trả lời

16

Bạn không thể đọc cookie từ tên miền khác - cuối của.

Cách duy nhất tôi có thể nghĩ là thêm một số mã vào tên miền thứ 2 nhận cookie cho bạn và sau đó đặt tên này vào một trang trên tên miền thứ nhất, trong khung nội tuyến.

Bạn rõ ràng là cần có quyền truy cập đầy đủ vào cả hai miền để có thể thực hiện loại điều này.

+0

tại sao chúng tôi không thể đọc cookie từ một tên miền khác bằng ngôn ngữ Scripting? – Pratik

+0

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

+5

Vì lý do bảo mật. Nếu bạn có thể đọc cookie từ các miền khác thì mỗi trang web bạn truy cập sẽ có quyền truy cập vào mọi cookie trên PC của bạn. – Archer

8

Vấn đề của bạn là các trình duyệt sẽ không cho phép javascript truy cập vào miền khác. Thêm:

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

dòng vào đầu cookie.php và nó sẽ hoạt động. Tuy nhiên, bạn sẽ không nhận được cookie (hoặc ít nhất là trong Chrome). Tôi không thể hiểu tại sao. Dường như Chrome tạo phiên mới cho javascript và sẽ không cho phép phiên truy cập vào các cookie trước đó. Giống như HttpOnly.

Các vấn đề liên quan