Django Cookie,session的概述,特點,用法
瀏覽器請求伺服器是無狀態的。無狀態指一次使用者請求時,瀏覽器、伺服器無法知道之前這個使用者做過什麼,每次請求都是一次新的請求。無狀態的應用層面的原因是:瀏覽器和伺服器之間的通訊都遵守HTTP協議。根本原因是:瀏覽器與伺服器是使用Socket套接字進行通訊的,伺服器將請求結果返回給瀏覽器之後,會關閉當前的Socket連線,而且伺服器也會在處理頁面完畢之後銷燬頁面物件。
有時需要保持下來使用者瀏覽的狀態,比如使用者是否登入過,瀏覽過哪些商品等。實現狀態保持主要有兩種方式:
在客戶端儲存資訊使用Cookie。
在伺服器端儲存資訊使用Session。
Cookie的用處:
記錄使用者的登入狀態
購物時將購物的資訊記錄cookie
Cookie的特點:
cookie是由伺服器生成,儲存在瀏覽器端的一小段文字資訊。
以鍵值對方式進行儲存。
通過瀏覽器訪問一個網站時,會將本地儲存的跟網站相關的所有cookie資訊傳送給該網站的伺服器。
cookie是基於域名安全的。
Cookie是有過期時間的,如果不指定,預設關閉瀏覽器之後cookie就會過期。
Cookie的操作:
獲取值
使用request.COOKIE['res']
賦值
使用response.set_cookie('res', res,max_aeg, expires)
max_age是一個整數,表示在指定秒數後過期。
expires是一個datetime
max_age與expires二選一。
如果不指定過期時間,在關閉瀏覽器時cookie會過期。
session
對於敏感、重要的資訊,建議要儲在伺服器端,不能儲存在瀏覽器中,如使用者名稱、餘額、等級、驗證碼等資訊。
開啟專案中的中介軟體預設開啟
開啟settings.py檔案,在項MIDDLEWARE_CLASSES中啟用Session中介軟體。預設開啟
Session的特點:
在伺服器端進行狀態保持的方案就是Session。
session是以鍵值對進行儲存的。
session依賴於cookie。
session也是有過期時間,如果不指定,預設兩週就會過期。
Session依賴於Cookie
問:所有請求者的Session都會儲存在伺服器中,伺服器如何區分請求者和Session資料的對應關係呢?
答:在使用Session後,會在Cookie中儲存一個sessionid的資料,每次請求時瀏覽器都會將這個資料發給伺服器,伺服器在接收到sessionid後,會根據這個值找出這個請求者的Session。
結果:如果想使用Session,瀏覽器必須支援Cookie,否則就無法使用Session了。
儲存Session時,鍵與Cookie中的sessionid相同,值是開發人員設定的鍵值對資訊,進行了base64編碼,過期時間由開發人員設定。
儲存方式
開啟test3/settings.py檔案,設定SESSION_ENGINE項指定Session資料儲存的方式,可以儲存在資料庫、快取、Redis等。
儲存在資料庫中,如下設定可以寫,也可以不寫,這是預設儲存方式。(需要連線資料庫並且已經存在對應的存放session資訊的表)
SESSION_ENGINE='django.contrib.sessions.backends.db'
儲存在快取中:儲存在本機記憶體中,如果丟失則不能找回,比資料庫的方式讀寫更快。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
混合儲存:優先從本機記憶體中存取,如果沒有則從資料庫中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
session的物件及方法
以鍵值對的格式寫會話。
request.session['鍵']=值
根據鍵讀取值。
request.session.get('鍵',預設值)
清除所有會話,在儲存中刪除值部分。
request.session.clear()
清除會話資料,在儲存中刪除會話的整條資料。
request.session.flush()
刪除會話中的指定鍵及值,在儲存中只刪除某個鍵及對應的值。
del request.session['鍵']
設定會話的超時時間,如果沒有指定過期時間則兩個星期後過期。
如果value是一個整數,會話將在value秒沒有活動後過期。
如果value為0,那麼使用者會話的Cookie將在使用者的瀏覽器關閉時過期。
如果value為None,那麼會話永不過期。
request.session.set_expiry(value)
瀏覽器請求伺服器是無狀態的。無狀態指一次使用者請求時,瀏覽器、伺服器無法知道之前這個使用者做過什麼,每次請求都是一次新的請求。無狀態的應用層面的原因是:瀏覽器和伺服器之間的通訊都遵守HTTP協議。根本原因是:瀏覽器與伺服器是使用Socket套接字進行通訊的,伺服器將請求結果返回給瀏覽器之後,會關閉當前的Socket連線,而且伺服器也會在處理頁面完畢之後銷燬頁面物件。
有時需要保持下來使用者瀏覽的狀態,比如使用者是否登入過,瀏覽過哪些商品等。實現狀態保持主要有兩種方式:
在客戶端儲存資訊使用Cookie。
在伺服器端儲存資訊使用Session。
Cookie的用處:
記錄使用者的登入狀態
購物時將購物的資訊記錄cookie,便於使用者在不同網頁選擇不同商品,付款時方便提取資訊
Cookie的特點:
cookie是由伺服器生成,儲存在瀏覽器端的一小段文字資訊。
以鍵值對方式進行儲存。
通過瀏覽器訪問一個網站時,會將本地儲存的跟網站相關的所有cookie資訊傳送給該網站的伺服器。
cookie是基於域名安全的。
Cookie是有過期時間的,如果不指定,預設關閉瀏覽器之後cookie就會過期。
Cookie的操作:
獲取值
使用request.COOKIE['res']
賦值
使用response.set_cookie('res', res,max_aeg, expires)
max_age是一個整數,表示在指定秒數後過期。
expires是一個datetime或timedelta物件,會話將在這個指定的日期/時間過期。
max_age與expires二選一。
如果不指定過期時間,在關閉瀏覽器時cookie會過期。
session
對於敏感、重要的資訊,建議要儲在伺服器端,不能儲存在瀏覽器中,如使用者名稱、餘額、等級、驗證碼等資訊。
開啟專案中的中介軟體預設開啟
開啟settings.py檔案,在項MIDDLEWARE_CLASSES中啟用Session中介軟體。預設開啟
Session的特點:
在伺服器端進行狀態保持的方案就是Session。
session是以鍵值對進行儲存的。
session依賴於cookie。
session也是有過期時間,如果不指定,預設兩週就會過期。
Session依賴於Cookie
問:所有請求者的Session都會儲存在伺服器中,伺服器如何區分請求者和Session資料的對應關係呢?
答:在使用Session後,會在Cookie中儲存一個sessionid的資料,每次請求時瀏覽器都會將這個資料發給伺服器,伺服器在接收到sessionid後,會根據這個值找出這個請求者的Session。
結果:如果想使用Session,瀏覽器必須支援Cookie,否則就無法使用Session了。
儲存Session時,鍵與Cookie中的sessionid相同,值是開發人員設定的鍵值對資訊,進行了base64編碼,過期時間由開發人員設定。
儲存方式
開啟test3/settings.py檔案,設定SESSION_ENGINE項指定Session資料儲存的方式,可以儲存在資料庫、快取、Redis等。
儲存在資料庫中,如下設定可以寫,也可以不寫,這是預設儲存方式。(需要連線資料庫並且已經存在對應的存放session資訊的表)
SESSION_ENGINE='django.contrib.sessions.backends.db'
儲存在快取中:儲存在本機記憶體中,如果丟失則不能找回,比資料庫的方式讀寫更快。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
混合儲存:優先從本機記憶體中存取,如果沒有則從資料庫中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
session的物件及方法
以鍵值對的格式寫會話。
request.session['鍵']=值
根據鍵讀取值。
request.session.get('鍵',預設值)
清除所有會話,在儲存中刪除值部分。
request.session.clear()
清除會話資料,在儲存中刪除會話的整條資料。
request.session.flush()
刪除會話中的指定鍵及值,在儲存中只刪除某個鍵及對應的值。
del request.session['鍵']
設定會話的超時時間,如果沒有指定過期時間則兩個星期後過期。
如果value是一個整數,會話將在value秒沒有活動後過期。
如果value為0,那麼使用者會話的Cookie將在使用者的瀏覽器關閉時過期。
如果value為None,那麼會話永不過期。
request.session.set_expiry(value)