簡體   English   中英

如何在相同的子域上獲得不同的Django應用程序來共享會話cookie?

[英]How to get distinct Django apps on same subdomain to share session cookie?

我們在同一個子域上部署了幾個Django應用程序。 一些高級用戶需要在這些應用程序之間跳轉。 我注意到每次他們在應用程序之間跳轉時,他們的會話cookie都會從Django收到一個新的會話ID。

除了在一個復雜的工作流程中,我不會使用Django會話表。 如果用戶在此工作流程中在應用程序之間跳轉,則會丟失會話並且必須重新開始。

我挖掘了Django會話代碼並發現:

django.conf.settings.SECRET_KEY

用於對每個請求的會話執行完整性檢查。 如果完整性檢查失敗,則會創建新會話。 實現這一點,我更改了每個應用程序中的密鑰以使用相同的值,認為這將允許完整性檢查通過並允許它們共享Django會話。 但是,它似乎沒有用。

有沒有辦法做到這一點? 我錯過了別的什么嗎?

提前致謝

我建議您將SESSION_COOKIE_NAME設置為兩個應用的不同值。 您的用戶最初仍需要登錄兩次,但他們的會話不會發生沖突 - 如果他們登錄到應用A,然后是應用B,然后返回A,他們仍會進行A會話。

Django實例之間的共享會話可能不是一個好主意。 如果你想要某種單點登錄,請查看類似django-cas的內容。 你仍然會有2個會話(你應該這樣做),但用戶只會登錄一次。

我同意在Django實例之間共享會話可能不是一個好主意。 如果你真的想,你可以:

  • 確保兩個django應用程序共享相同的SECRET_KEY
  • 確保兩個django應用程序共享相同的SeSSON_COOKIE_NAME
  • 確保將SESSION_COOKIE_DOMAIN設置為允許兩個實例共享cookie的內容。 (如果它們真的共享相同的子域,那么您當前的設置可能沒問題。)
  • 確保兩個Django實例使用相同的會話后端(相同的數據庫,相同的文件目錄,相同的memcached配置等)
  • 確保放入會話的任何內容在Django數據庫中都有意義:至少,這將包括用戶ID,因為Django auth使用它來記住哪個用戶登錄。

所有這一切,我還沒有嘗試過這一切,所以你可能仍然有麻煩!

暫無
暫無

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

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