Django學習-16-Session
阿新 • • 發佈:2017-11-10
再次 cookie cached 請求 get temp pat 添加 機器 1.保存在服務器的鍵值對
2.Session做驗證時,還要依賴Cookie(重要)。當用戶登錄成功時,生成隨機字符串,一份放到Session,一份放到Cookie。當用戶再次登錄,查詢用戶Cookie中的隨機字符串,與我Session中的隨機字符串比較,如果相同則登錄成功
3.隨機字符串是Session中的key,每一個key中value對應用戶數據
4.django默認生成隨機字符串,並且數據庫中也會有相應的記錄
5.可以保存在文件中、服務器中、內存中、緩存中、數據庫中
6.Django的request默認封裝了session,前端就可以獲取到
類似:
Session{
jagiugas個asgiu:{
‘is_login‘:True,
‘user‘:‘..‘,
‘password‘:‘sadasd‘,
....
}
asgfiahy1515sog:{
....
}
}
代碼實例:
設置Session
request.session[‘username‘] = xxxx
Django的request.session方法為我們實現了四件事情
① 生成字符串
②寫到用戶瀏覽器cookie中
③保存一份到session中
④在隨機字符串對應的字典中設置相關的鍵值對
獲取Session
username = request.session[‘username‘]
獲取session中的值時也為我們做了四件事
①首先獲取cookie中的字符串
②查詢session中字符串
③獲取session對應的字典
④獲取字典相應的鍵值對
默認我們使用的數據庫Session有如下的操作
# 獲取、設置、刪除Session中數據
request.session[‘k1‘]
request.session.get(‘k1‘,None) #推薦使用,不存在不報錯
request.session[‘k1‘] = 123
request.session.setdefault(‘k1‘,123) # 存在則不設置
del request.session[‘k1‘] #刪除session鍵值對
# 所有 鍵、值、鍵值對
request.session.keys()
request.session.values()
request.session.items() #返回 k,v
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems()
# 用戶session的隨機字符串
request.session.session_key
# 將所有Session失效日期小於當前日期的數據刪除
request.session.clear_expired()
# 檢查 用戶session的隨機字符串 在數據庫中是否存在
request.session.exists("session_key")
# 刪除當前用戶的所有Session數據,還要查詢一下用戶session_key當做參數傳遞
request.session.delete("session_key")
# 刪除當前用戶的所有Session數據
request.session.clear()
request.session.set_expiry(value)
* Django的默認超時時間是兩周。
* 如果value是個整數,session會在些秒數後失效。
* 如果value是個datatime或timedelta,session就會在這個時間後失效。
* 如果value是0,用戶關閉瀏覽器session就會失效。
* 如果value是None,session會依賴全局session失效策略。
定制Session默認屬性,添加至settings.py文件中
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認) SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑(默認) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默認) SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(默認) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸(默認) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默認) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期(默認) SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,默認修改之後才保存(默認)如果每次都保存Session,session過期時間為:最後一次請求開始記時,直到超時為止 Django中使用數據庫Session時,Session的優勢是體現不出來的,修改Session存儲之後,views不用做任何修改 1.數據庫 SESSION_ENGINE = ‘django.contrib.sessions.backends.db‘ # 引擎(默認) 2.緩存Session SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘ # 引擎 SESSION_CACHE_ALIAS = ‘default‘ # 使用的緩存別名(默認內存緩存,也可以是memcache),此處別名依賴緩存的設置 緩存機器在settings中的配置 CACHES = { ‘default‘:{ ‘BACKEND‘:‘django.core.cache.backends.memcached.MemcachedCache‘, ‘LOCATION‘:[ ‘IP1:port‘, ‘IP2:port‘ ] }, ‘a1‘:{ ‘BACKEND‘:‘django.core.cache.backends.memcached.MemcachedCache‘, ‘LOCATION‘:[ ‘IP1:port‘, ‘IP2:port‘ ] }, } 3.數據庫文件Session SESSION_ENGINE = ‘django.contrib.sessions.backends.file‘ # 引擎 SESSION_FILE_PATH = None # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T 加入路徑 SESSION_FILE_PATH = os.path.join(BASE_DIR,‘cache‘) 4.緩存+數據庫Session 獲取Session先去緩存中拿,如果沒有就去數據庫拿,再放一份到緩存 SESSION_ENGINE = ‘django.contrib.sessions.backends.cached_db‘ # 引擎 5.加密cookie Session 相當於把加密後的Session到客戶端,安全性相對較低 SESSION_ENGINE = ‘django.contrib.sessions.backends.signed_cookies‘ # 引擎
Django學習-16-Session