默認情況下诊杆,session 數(shù)據(jù)是存儲到數(shù)據(jù)庫中的歼捐。當然也可以將session數(shù)據(jù)存儲到其他地方〕啃冢可以通過設置SESSION_ENGINE來更改session的存儲位置豹储,這個可以配置為以下幾種方案:
- django.contrib.sessions.backends.db :使用數(shù)據(jù)庫。默認就是這種方案淘这。
- django.contrib.sessions.backends.file :使用文件來存儲session,
- django.contrib.sessions.backends.cache :使用緩存來存儲session.想要將數(shù)據(jù)存儲到緩存中剥扣,前提是你必須要
在settings.py 中配置好CACHES ,并且是需要使用Memcached巩剖,而不能使用純內存作為緩存。 - django.contrib.sessions.backends.cached_db .在存儲數(shù)據(jù)的時候钠怯,會將數(shù)據(jù)先存到緩存中佳魔,再存到數(shù)據(jù)庫中。這樣就可以保證萬一緩存系統(tǒng)出現(xiàn)問題晦炊,session數(shù)據(jù)也不會丟失鞠鲜。在獲取數(shù)據(jù)的時候,會先從緩存中獲取刽锤,如果緩存中沒有镊尺,那么就會從數(shù)據(jù)庫中獲取。
- Django.contrib.sessions.backends.signed_cookies: 將session信息加密后存儲到別覽器的cookie中并思。這種方式要注意安全庐氮,
建議設置SESSION_COOKIE_HTTPONLY= True,那么在瀏覽器中不能通過js來操作session數(shù)據(jù)宋彼,并且還需要對settings.py中
的SECRET_KEY進行保密弄砍,因為一旦別人知道這個SECRET_KEY,那么就可以進行解密。另外還有數(shù)是在cookie中输涕,存儲的數(shù)據(jù)不能超過4k音婶。
cached_db同時存儲到緩存和數(shù)據(jù)庫
# settings.py
CACHES = {
'default' : {
'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION' : [
'127.0.0.1:11211',
],
'KEY_FUNCTION':lambda key, key_prefix, version: 'django:' + key,
}
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
可以看到 在django_sessions表出現(xiàn)數(shù)據(jù)的同時 ,memcached也產(chǎn)生了數(shù)據(jù)
stats cachedump 4 0
ITEM django:django.contrib.sessions.cached_db9hsbz2o5gb39radizxo8ptiah09n8u7e [44 b; 1584947868 s]
END