1. 程式人生 > >Django Cookie,session的概述,特點,用法

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

或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)

瀏覽器請求伺服器是無狀態的。無狀態指一次使用者請求時,瀏覽器、伺服器無法知道之前這個使用者做過什麼,每次請求都是一次新的請求。無狀態的應用層面的原因是:瀏覽器和伺服器之間的通訊都遵守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)