def home(request)。
# logged in(request).
if request.user.is_authenticated:
request.session['username'] = str(request.user)。
request.session.set_expiry(0)
# anonymous[/span]。
else:
# How could Django get session data here??
cur = request.session.get('username', None)
if cur:
pass
else:
anon = random.choice(settings.SESSION_NAMES)
request.session['username'] = anon
request.session.set_expiry(42)
res = render(request, 'ex/home.html'/span>, {'username'/span>: request.session['username'/span>]})
return res
我試圖理解關于會話的問題。在上面的匿名案例中,我將會話資料'用戶名'設定為已經獲得的請求。而在下一個請求中(重繪 后),我可以獲得會話資料。
但是我不明白它是如何作業的。這是一個新的請求,而我在前一個請求中設定了'用戶名',而不是回應。
我如何從下一個請求物件中獲得'username',盡管沒有將它設定在前一個回應物件中?
uj5u.com熱心網友回復:
我怎樣才能從下一個請求物件中獲得'用戶名',盡管沒有將其設定為先前的回應物件?
會話資料不是由客戶端存盤,而是由服務器存盤。存盤在客戶端的資料是cookies。
Django在瀏覽器中設定了一個默認名為sessionid的cookie(你可以通過改變SESSION_COOKIE_NAME設定[Django-doc]來改變它,因此它包含一個為這個會話存盤的會話資料的標識。
因此,瀏覽器每次都會用sessionid進行請求,如果你訪問request.session,那么它就會查看它存盤在資料庫中的內容。
你可以改變服務器存盤 cookie 的方式,以及使用何種序列化器。欲了解更多資訊,請參閱檔案中的如何使用會話部分
。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319178.html
標籤:
