我在Django中使用會話來存儲登錄用戶信息以及一些其他信息。我一直在閱讀Django會話網站,仍然有幾個問題。在Django中使用會話
從Django的網站:
默認情況下,在 數據庫的Django存儲會話(使用模型
django.contrib.sessions.models.Session
)。 儘管這很方便,但在某些 設置中,將會話 數據存儲在別處會更快,因此Django可以配置爲 ,將會話數據存儲在文件系統的 或緩存中。
另外:
對於持久性,緩存數據,設置
SESSION_ENGINE
到django.contrib.sessions.backends.cached_db
。 這將使用直寫式高速緩存 - 每次寫入高速緩存也將 寫入數據庫。如果數據尚不在緩存中,則會話讀取 僅使用數據庫 。
是否有一個很好的經驗規則使用哪一個? cached_db
似乎總是一個更好的選擇,因爲最好的情況下,數據在緩存中,最壞的情況是它在數據庫中,無論如何。一個缺點是我必須設置memcached。
默認情況下,
SESSION_EXPIRE_AT_BROWSER_CLOSE
設置 到False
,這意味着會話cookie 將只要SESSION_COOKIE_AGE
存儲在用戶的瀏覽器中 。使用 這個,如果你不希望人們有 每次打開瀏覽器 時間登錄。
是否有可能同時存在,會話在瀏覽器到期關閉並給一個年齡?
如果值爲整數,會話 將 活動的許多秒後到期。例如,撥打
request.session.set_expiry(300)
將 使會話在5分鐘內過期。
什麼被認爲是 「不活動」?
如果您正在使用的數據庫後端,請注意,會話數據可以 積聚在
django_session
數據庫表和Django不 提供自動清除。因此, 這是您的工作,定期清除過期的 會話。
這就是說,即使會話過期,我的數據庫中仍有記錄。在哪裏將代碼放在「清除數據庫」?我覺得你需要一個單獨的線程來每隔一段時間(每隔一小時?)通過數據庫並刪除任何過期的會話。
對於一個有很多用戶的大網站,你可能會有很多會話?我不知道「crontab」是什麼,所以我一定會考慮一下。我還認爲「活動」可能意味着更新或訪問會話。 – JPC 2010-09-13 21:18:49
@JPC:首先定義「大」和「批」。然後找出多少次會話。他們不是一個巨大的數據庫負擔。 「訪問會話」中的「活動」與Django處理的任何GET/POST請求完全相同 - 還有什麼意思? – 2010-09-13 21:34:04