簡體   English   中英

Django會話cookie:從(任何其他)域中,檢查用戶是否已登錄

[英]Django session cookie: from (any) other domain, check if user is logged in

我有一個域domain1.com。 用戶登錄並設置了cookie。 這是使用Django會話完成的。

然后,我轉到另一個域domain2.com。 該域運行javascript。 通過此javascript,我想查看用戶是否登錄到domain1.com。

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

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

編輯:

我要解決的真正問題是什么? (下面有評論):我創建了一個Chrome擴展程序。 當用戶按下domain2中的擴展程序圖標時,將運行javascript,該javascript從頁面收集信息。 此信息需要發送到domain1上的用戶帳戶。 請注意,domain2可以是ANY域,而不是我創建的域。

我嘗試過的AJAX和cookie。

從domain1設置cookie:

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”

從domain2調用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是真實域。 這可能是問題嗎? 它確實會正確調用該函數。

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

不可以。Cookie僅限於域(及其子域)。 www.foo.comzoo.foo.com可訪問.foo.com的cookie,但bar.com不可bar.com

還是可以通過ajax以某種方式撥打call domain1來檢查用戶是否已登錄?

這是一種方法,是的,它將起作用。

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

對,他們是。 如果您已登錄Chrome,並且打開了Safari,則將無法登錄。

Cookies是特定於域的,您可以在foo.example.com和bar.example.com之間共享cookie,但不能在兩個域之間共享cookie。 要解決此問題,您需要從域2向域1發送ajax請求,並檢查其中是否設置了cookie,然后將響應發送回域2。

選中此So問題以供參考: 為具有多個域名的Django站點設置默認cookie域

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM