1. 程式人生 > >Django學習-16-Session

Django學習-16-Session

再次 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