啟用session
首先確認在 MIDDLEWARE_CLASSES中確保它包含'django.contrib.sessions.middleware.SessionMiddleware',如果不想使用用session會話可以刪除這一項
配置session引擎
默認情況下,django框架會將session數據存儲在數據庫(django框架中默認創建的model里有存儲session的model,這也是為什么在使用前需執行創建數據庫操作的原因,使用django.contrib.sessions.models.Session模型)中。從數據庫相比其他存儲session的方式慢一點,所以可以配置django來存儲session到文件系統或者緩存中。
使用數據庫支持的session
如果你想用數據庫存儲session,需要添加'django.contrib.sessions' 到你的INSTALLED_APPS設置中。並且創建存儲session數據的表。
使用基於緩存的session
使用緩存存儲session,在性能上會比使用數據庫更快。
使用緩存來存儲session必須先進行配置緩存
缺點:本地內存使用緩存不能長時間保留數據,所以不是好的選擇,而且直接使用文件或者數據庫比文件或數據庫緩存速度快。本地緩存系統不是多進程安全的。
使用CACHES中可以定義多個緩存,Django使用默認緩存,若要用其他緩存,可以設置SESSIONCACHEALIAS為該緩存的名字
配置好緩存之后,有兩種緩存可供選擇
1. 對於簡單的緩存session,可以設置SESSIONENGINE為'django.contrib.sessions.backends.cache',這正方式就是將數據緩存在內存中,不做持久化存儲,如果緩存填滿或者緩存服務器重啟,緩存數據就可能會被清理掉
2. 持久化數據緩存就要使用數據庫,設置SESSIONENGINE為'django.contrib.sessions.backends.cacheddb',在寫數據的時候使用緩存,讀取時先讀緩存中的數據,如果緩存中數據被清理了,就從數據庫中讀取
兩種緩存方式都很快,簡單的更快一點,因為沒有做數據持久化
特殊說明:在1.7 版之前,cacheddb 永遠使用default緩存而不是SESSIONCACHEALIAS。
使用緩存例子: SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSIONCACHEALIAS = 'default'#表示使用緩存的別名,在CACHES中尋找,下面有default和db1兩種選擇
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] }, 'db1': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '172.19.26.240:11211', '172.19.26.242:11211', ] } }
附加內容
CACHES的格式,默認: { 'default':{ 'BACKEND':'django.core.cache.backends.locmen.LocMemCache', } }
一個字典包含所有緩存要使用的設置它是一個嵌套字典,其內容將高速緩存別名映射到包含單個高速緩存的選項的字典中。
CACHES設置必須配置‘default’緩存;還可以指定任何數量的附加高速緩存。如果您正在使用本地內存高速緩存之外的其他高速緩存后端,或者需要定義多個高速緩存,這就需要添加其他高速緩存項。以下高速緩存選項可用。 BACKEND 默認值:''(空字符串) 要使用的緩存后端。內置高速緩存后端是: 'django.core.cache.backends.db.DatabaseCache' 'django.core.cache.backends.dummy.DummyCache' 'django.core.cache.backends.filebased.FileBasedCache' 'django.core.cache.backends.locmem.LocMemCache' 'django.core.cache.backends.memcached.MemcachedCache' 'django.core.cache.backends.memcached.PyLibMCCache' 通過將BACKEND設置為緩存后端類的完全限定路徑(即mypackage.backends.whatever.WhateverCache),您可以使用未隨Django提供的緩存后端。 )。
基於文件的session
使用基於文件的session,使用SESSIONENGINE為'django.contrib.sessions.backends.file',使用SESSIONFILE_PATH設置文件的位置,如果不設會使用默認存儲位置為,它的默認值來自tempfile.gettempdir()的輸出,大部分情況是/tmp
使用基於Cookie的session
要使用基於Cookie 的會話,請設置SESSIONENGINE 為"django.contrib.sessions.backends.signedcookies"。此時,會話數據的存儲將使用Django 的加密簽名 工具和SECRET_KEY 設置。 注 建議保留SESSIONCOOKIEHTTPONLY 設置為True 以防止從JavaScript 中訪問存儲的數據。
session的使用
# 獲取、設置、刪除Session中數據
request.session['k1']
request.session.get('k1',None)
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在則不設置
del request.session['k1']#刪除某個鍵值對
# 所有 鍵、值、鍵值對
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
# 用戶session的隨機字符串<br/> request.session.session_key<br/> # 將所有Session失效日期小於當前日期的數據刪除<br/> request.session.clear_expired()<br/> # 檢查 用戶session的隨機字符串 在數據庫中是否<br/> request.session.exists("session_key")<br/> # 刪除當前用戶的所有Session數據<br/> request.session.delete("session_key")<br/> # 注銷使用<br/> request.session.clear()<br/> #設置超時時間,set_expiry(value)方法是在最后一次刷新開始計算<br/> request.session.set_expiry(value)<br/> * 如果value是個整數,session會在些秒數后失效。<br/> * 如果value是個datatime或timedelta,session就會在這個時間后失效。<br/> * 如果value是0,用戶關閉瀏覽器session就會失效。<br/> * 如果value是None,session會依賴全局session失效策略。<br/>