2012-03-18 11 views
1

如果我清除我的cookies並運行此視圖,我會爲每個頁面加載獲取新的會話密鑰。耐人尋味的Django會話保存行爲

如果我註釋掉打印並在模板中輸出會話密鑰,每次加載新的會話密鑰。

如果我在視圖和模板中均打印會話密鑰,則會話密鑰將'保存'並保持每頁加載相同。

def view_session(request): 
    print request.session.session_key 
    return render(request, "view_session.html", {}) 

那麼如何解釋這種行爲呢?

這不僅僅是兩個讀取,因爲我可以在視圖中打印兩次並仍然獲得新的密鑰。

回答

3

默認情況下,Django的只是保存到當會話 已被修改的會話數據庫 - 也就是它的字典值已被 分配或刪除

要更改此默認行爲,設置SESSION_SAVE_EVERY_REQUEST 設置爲True。當設置爲True時,Django會將會話保存到每個請求的 數據庫。

請注意,會話cookie僅在創建或修改會話 時纔會發送。如果SESSION_SAVE_EVERY_REQUEST爲True,則會在每個請求上發送會話cookie。

when sessions are saved

+0

好的,但我沒有修改會話。 – mobiletim 2012-03-18 13:00:03

+0

謝謝,但問題的關鍵在於理解行爲發生的原因,而不僅僅是如何改變它。 – mobiletim 2012-03-18 13:03:26

+0

用您的查看代碼更新您的問題。你不應該直接訪問會話屬性,只能作爲字典。 – 2012-03-18 13:03:31