2010-09-02 153 views
6

當用戶訪問我的域時,會話由django發出。當他試圖在Facebook上做Oauth時,他點擊我網站上的一個按鈕,該按鈕重定向到Facebook.com。 Facebook重定向回我的域名,但此時,用戶的會話丟失,Django似乎在發佈新的會話變量。當從其他域重定向時,Django會話丟失

我希望丟棄的會話持續存在,因爲我必須將訪問者與他的Facebook帳戶關聯到我的網站,但是當會話被刪除時,登錄的用戶將被註銷。

我懷疑這可能是與django的XSS保護相關的行爲。當用戶離開我們的網站登錄Facebook時,如何讓用戶信息持續存在?

+0

您的問題與http://docs.djangoproject.com/en/1.2/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions有關嗎?另外,定義會話被刪除。 '用戶'是否仍然有其cookie? – cpf 2010-09-02 15:33:48

+0

會話被刪除意味着原始會話ID cookie被刪除並被替換爲新的。感謝您的鏈接,它似乎表明,當用戶訪問新網站並返回到原始域時,不應刪除會話。 – Mark 2010-09-02 16:56:40

回答

9

您可能想要確認Cookie在創建時具有相同的域。這有時會導致問題。如果您要訪問網站www.example.com並且OAuth回調指向example.com,則可能有兩個單獨的Cookie,一個用於www.example.com,另一個用於example.com

打開「始終詢問」您的瀏覽器並注意cookie的詳細信息。確保「主機:」字段的值兩次相同。

此修復程序在您的settings.py文件中輸入類似.example.comSESSION_COOKIE_DOMAIN

+0

我嘗試了您的建議,看起來問題已解決,謝謝! – Mark 2010-09-03 16:27:00

+0

一直堅持這樣2個小時x_x。感謝您的解決方案! – Weaver 2013-07-16 20:45:48

+2

這發生在我身上,因爲我剛開始使用'localhost',然後回到'127.0.0.1'。 – Seth 2015-08-27 19:09:32

2

我也剛剛發現,如果您有兩個Django應用程序在同一個域上運行,爲避免Cookie衝突,您可能希望爲每個應用程序設置不同的SESSION_COOKIE_NAME。