2013-04-23 77 views
0

我有一個域domain1.com。用戶登錄並設置cookie。這是使用Django會話完成的。Django會話cookie:從(任何)其他域,檢查用戶是否登錄

然後我轉到另一個域domain2.com。該域名運行javascript。從這個javascript,我想看看用戶是否登錄到domain1.com。

這可能嗎?我可以在domain2中看到屬於domain1的cookie嗎?或者我可以以某種方式通過ajax撥打電話domain1來檢查用戶是否已登錄?

另外,用戶最初可能從Chrome登錄到domain1,但現在他們正在從另一個瀏覽器訪問domain2。 Cookie瀏覽器不是特定的嗎?

編輯:

我試圖解決的真正問題? (重新評論如下):我創建了一個Chrome擴展。當用戶按下來自domain2的擴展圖標時,將運行一個JavaScript,它從頁面收集信息。這些信息需要發送到域1上的用戶帳戶。請注意,domain2可以是任何域,不是我創建的域。

我嘗試使用AJAX和cookie。從domain1的

集餅乾:

response.set_cookie("user_cookie", value="somevalue", max_age=60*60, expires=None, path='/', domain=None, secure=None, httponly=False) 

創建Python函數,它是從domain1.com/checklogin執行:

@csrf_exempt 
def is_logged_in(request): 
    cookie = request.COOKIES.get('user_cookie') 
    if cookie is not None: 
     return HttpResponse("1") 
    else: 
     return HttpResponse("0") 

轉到domain1.com/checklogin - >的響應是「 1" 域2

調用JavaScript如下:

var xmlHttp_1=new XMLHttpRequest(); 
xmlHttp_1.open("POST","http://domain1.com/checklogin/",false); 
xmlHttp_1.send(); 
alert(xmlHttp_1.responseText); 

此處的迴應錯誤地爲0.它沒有看到由domain1創建的cookie。

請注意,在這一點上,domain1是localhost和domain2是一個真正的域。這可能是問題嗎?它確實調用了該函數。

+1

您嘗試在此處解決的實際問題是什麼? – 2013-04-23 07:31:30

+0

你可能想看看openId或oauth解決方案,這裏是一個關於跨瀏覽器會話的優秀帖子(http://dustinfarris.com/2012/2/sharing-django-users-and-sessions-across-projects/ ) – 2013-04-23 07:43:15

+0

請不要完全改變問題,以便現在的答案無關緊要!改爲提出一個新問題。 – 2013-04-23 13:04:02

回答

0

Cookie是域特定的,您可以在foo.example.com和bar.example.com之間共享cookie,但不能在兩個域之間共享cookie。爲了解決這個問題,你需要發送一個從域2到域1的Ajax請求,然後檢查cookie是否被設置,並將響應發送回域2。

選中此所以爲參考問: Setting default cookie domain for Django site with multiple domain names

+0

我試着從domain2發送ajax請求到domain2,但它不工作。我編輯了我的答案,以顯示我的嘗試。請注意,domain2可以是任何域,不是我創建的域。 – user984003 2013-04-23 10:53:37

+0

它應該是一個jsonp請求,使跨瀏覽器ajax請求工作 – codefreak 2013-04-23 12:51:03

1

這可能嗎?我可以從 domain2看到屬於domain1的cookie嗎?

編號Cookie僅限於域(及其子域)。 .foo.com的Cookie可通過www.foo.com,zoo.foo.com訪問,但不可訪問bar.com

或者我可以以某種方式通過ajax打電話domain1來檢查用戶是否登錄了 ?

這是一種方式,是的,它會工作。

此外,用戶最初可能已從Chrome登錄到域1, ,但現在他們正從另一個瀏覽器訪問域2。是不是 餅乾瀏覽器具體?

是的,他們是。如果您已登錄Chrome,並且您打開Safari,則您將不會登錄。

+0

如何讓ajax調用工作?我已經通過回答編輯來顯示我所嘗試過的。 – user984003 2013-04-23 10:44:42