從內(nèi)部來看,每個(gè)session都只是一個(gè)普通的Django model(在 django.contrib.sessions.models 中定義)。每個(gè)session都由一個(gè)隨機(jī)的32字節(jié)哈希串來標(biāo)識(shí),并存儲(chǔ)于cookie中。 因?yàn)樗且粋€(gè)標(biāo)準(zhǔn)的模型,所以你可以使用Django數(shù)據(jù)庫API來存取session。
>>> from django.contrib.sessions.models import Session>>> s = Session.objects.get(pk='2b1189a188b44ad18c35e113ac6ceead')>>> s.expire_datedatetime.datetime(2005, 8, 20, 13, 35, 12)
你需要使用get_decoded() 來讀取實(shí)際的session數(shù)據(jù)。 這是必需的,因?yàn)樽值浯鎯?chǔ)為一種特定的編碼格式。
>>> s.session_data'KGRwMQpTJ19hdXRoX3VzZXJfaWQnCnAyCkkxCnMuMTExY2ZjODI2Yj...'>>> s.get_decoded(){'user_id': 42}何時(shí)保存Session
缺省的情況下,Django只會(huì)在session發(fā)生變化的時(shí)候才會(huì)存入數(shù)據(jù)庫,比如說,字典賦值或刪除。
# Session is modified.request.session['foo'] = 'bar'# Session is modified.del request.session['foo']# Session is modified.request.session['foo'] = {}# Gotcha: Session is NOT modified, because this alters# request.session['foo'] instead of request.session.request.session['foo']['bar'] = 'baz'你可以設(shè)置 SESSION_SAVE_EVERY_REQUEST 為 True 來改變這一缺省行為。如果置為True的話,Django會(huì)在每次收到請(qǐng)求的時(shí)候保存session,即使沒發(fā)生變化。
注意,會(huì)話cookie只會(huì)在創(chuàng)建和修改的時(shí)候才會(huì)送出。 但如果 SESSION_SAVE_EVERY_REQUEST 設(shè)置為 True ,會(huì)話cookie在每次請(qǐng)求的時(shí)候都會(huì)送出。 同時(shí),每次會(huì)話cookie送出的時(shí)候,其 expires 參數(shù)都會(huì)更新。
新聞熱點(diǎn)
疑難解答
圖片精選