Session: 是服務端的一個鍵值對 內部機制依賴於cookie 1、分類 Django中預設支持Session,其內部提供了5種類型的Session供開發者使用: 資料庫(預設) 緩存 文件 緩存+資料庫 加密cookie 配置方式不同,操作方式相同 2、配置(settings.py) 2.1 ...
Session:
- 是服務端的一個鍵值對
- 內部機制依賴於cookie
1、分類
Django中預設支持Session,其內部提供了5種類型的Session供開發者使用:
- 資料庫(預設)
- 緩存
- 文件
- 緩存+資料庫
- 加密cookie
配置方式不同,操作方式相同
2、配置(settings.py)
2.1 資料庫Session
Django預設支持Session,並且預設是將Session數據存儲在資料庫中,即:django_session 表中。
1 配置 settings.py
2
3 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(預設)
4
5 SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字元串(預設)
6 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑(預設)
7 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的功能變數名稱(預設)
8 SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie(預設)
9 SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸(預設)
10 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(預設)
11 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期(預設)
12 SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,預設修改之後才保存(預設)
13
View Code
2.2 緩存Session
1 配置 settings.py
2
3 SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
4 SESSION_CACHE_ALIAS = 'default' # 使用的緩存別名(預設記憶體緩存,也可以是memcache),此處別名依賴緩存的設置
5
6
7 SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字元串
8 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑
9 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的功能變數名稱
10 SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie
11 SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸
12 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
13 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期
14 SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,預設修改之後才保存
15
View Code
2.3 文件Session
1 配置 settings.py
2
3 SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
4 SESSION_FILE_PATH = None # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir() # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
5
6
7 SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字元串
8 SESSION_COOKIE_PATH = "/" # Session的cookie保存的路徑
9 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的功能變數名稱
10 SESSION_COOKIE_SECURE = False # 是否Https傳輸cookie
11 SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http傳輸
12 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
13 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否關閉瀏覽器使得Session過期
14 SESSION_SAVE_EVERY_REQUEST = False # 是否每次請求都保存Session,預設修改之後才保存
15
View Code
2.4 緩存+資料庫Session
1 資料庫用於做持久化,緩存用於提高效率
2
3 配置 settings.py
4
5 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
6
View Code
2.5 加密cookie Session
1 配置 settings.py
2
3 SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
View Code
3、使用
1 使用
2
3 def index(request):
4 # 獲取、設置、刪除Session中數據
5 request.session['k1']
6 request.session.get('k1',None)
7 request.session['k1'] = 123
8 request.session.setdefault('k1',123) # 存在則不設置
9 del request.session['k1']
10
11 # 所有 鍵、值、鍵值對
12 request.session.keys()
13 request.session.values()
14 request.session.items()
15 request.session.iterkeys()
16 request.session.itervalues()
17 request.session.iteritems()
18
19
20 # 用戶session的隨機字元串
21 request.session.session_key
22
23 # 將所有Session失效日期小於當前日期的數據刪除
24 request.session.clear_expired()
25
26 # 檢查 用戶session的隨機字元串 在資料庫中是否
27 request.session.exists("session_key")
28
29 # 刪除當前用戶的所有Session數據
30 request.session.delete("session_key")
31
32 request.session.set_expiry(value)
33 * 如果value是個整數,session會在些秒數後失效。
34 * 如果value是個datatime或timedelta,session就會在這個時間後失效。
35 * 如果value是0,用戶關閉瀏覽器session就會失效。
36 * 如果value是None,session會依賴全局session失效策略。
View Code
4、擴展:Session用戶驗證
1 def login(func):
2 def wrap(request, *args, **kwargs):
3 # 如果未登陸,跳轉到指定頁面
4 if request.path == '/test/':
5 return redirect('http://www.baidu.com')
6 return func(request, *args, **kwargs)
7 return wrap