簡體   English   中英

在Django中使用會話

[英]Using sessions in 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 如果您不希望每次打開瀏覽器時都必須登錄,請使用此選項。

是否可以同時使用,會話在瀏覽器關閉時到期並給出年齡?

如果value是一個整數,則會話將在該多次不活動后過期。 例如,調用request.session.set_expiry(300)會使會話在5分鍾后到期。

什么被認為是“不活躍”?

如果您正在使用數據庫后端,請注意會話數據可以在django_session數據庫表中累積,而Django不提供自動清除。 因此,您的工作是定期清除過期的會話。

這意味着,即使會話過期,我的數據庫中仍有記錄。 究竟哪里會把代碼放到“清除數據庫”? 我覺得你需要一個單獨的線程來每隔一段時間(每小時?)瀏覽數據庫並刪除任何過期的會話。

有一個很好的經驗法則可以使用哪一個?

沒有。

Cached_db似乎永遠是一個更好的選擇......

沒關系。

在某些情況下,有許多Django(和Apache)進程查詢公共數據庫。 mod_wsgi以這種方式允許很多可伸縮性。 緩存沒有多大幫助,因為會話是在Apache(和Django)進程之間隨機分布的。

是否可以同時使用,會話在瀏覽器關閉時到期並給出年齡?

不明白為什么不。

什么被認為是“不活躍”?

我假設你在開玩笑。 “活動”是 - 好 - 活動。 你懂。 發生在Django的東西。 Django可以看到的GET或POST請求。 還有什么呢?

究竟哪里會把代碼放到“清除數據庫”?

把它放在crontab或類似的東西。

我覺得你需要一個單獨的線程來每隔一段時間(每小時?)通過數據庫

忘記線程(請)。 這是一個單獨的過程。 一天一天好。 你認為你會有多少次?

暫無
暫無

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

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