回話技術,比如在做登錄功能的時候,需要配合是用存儲在客戶端的cookie信息,以及存儲在服務端的session來實現登錄功能。在cookie中保存了用戶的信息,特別是一個特殊的令牌信息,當用戶拿着這個特殊的令牌來訪問網站的時候,網站會從cookie中獲取這個特殊令牌去數據庫session中去查詢是否有這個對應的令牌的信息,如果有則驗證成功,就可以把用戶的信息返回給客戶端了,如果驗證失敗則提示用戶沒有登錄等等提示信息。
cookie不屬於http協議范圍,由於http協議無法保持狀態,但實際情況,我們卻又需要“保持狀態”,因此cookie就是在這樣一個場景下誕生。
cookie的工作原理是:由服務器產生內容,瀏覽器收到請求后保存在本地;當瀏覽器再次訪問時,瀏覽器會自動帶上cookie,這樣服務器就能通過cookie的內容來判斷這個是“誰”了。
cookie雖然在一定程度上解決了“保持狀態”的需求,但是由於cookie本身最大支持4096字節,以及cookie本身保存在客戶端,可能被攔截或竊取,因此就需要有一種新的東西,它能支持更多的字節,並且他保存在服務器,有較高的安全性。這就是session。
問題來了,基於http協議的無狀態特征,服務器根本就不知道訪問者是“誰”。那么上述的cookie就起到橋接的作用。
我們可以給每個客戶端的cookie分配一個唯一的id,這樣用戶在訪問時,通過cookie,服務器就知道來的人是“誰”。然后我們再根據不同的cookie的id,在服務器上保存一段時間的私密資料,如“賬號密碼”等等。
總結而言:cookie彌補了http無狀態的不足,讓服務器知道來的人是“誰”;但是cookie以文本的形式保存在本地,自身安全性較差;所以我們就通過cookie識別不同的用戶,對應的在session里保存私密的信息以及超過4096字節的文本。
另外,上述所說的cookie和session其實是共通性的東西,不限於語言和框架
####
1. cookie
HTTP 協議是無狀態的。因此,若不借助其他手段,遠程的服務器就無法知道以前和客戶端做了哪些通信。Cookie 就是「其他手段」之一。 Cookie 一個典型的應用場景,就是用於記錄用戶在網站上的登錄狀態。
用戶登錄成功后,服務器下發一個(通常是加密了的)Cookie 文件。客戶端(通常是網頁瀏覽器)將收到的 Cookie 文件保存起來。下次客戶端與服務器連接時,將 Cookie 文件發送給服務器,由服務器校驗其含義,恢復登錄狀態(從而避免再次登錄)。
#####
1.1 描述
瀏覽器端的回話技術 |
#####
1.2 cookie方法
設置:response.set_cookie(key, value, max_age=None, exprise=None) |
注意:cookie不能跨瀏覽器
參數定義:
max_age和exprise時間:
max_age : 整數,指定cookie過期時間,以秒為單位 |
設置10天后過期:
exprise=datetime.datetime.now() + timedelta(days=10) 10天后過期 |
永不過期:
exprise設置為None表示為永不過期 |
####
2. session
#####
2.1 描述
服務端會話技術,依賴於cookie |
#####
2.2 開啟session設置
1)django中啟用SESSION
在settings中修改如下地方
INSTALLED_APPS: |
每個HttpResponse對象都有一個session屬性,也是一個類字典對象
#####
2.3 常用操作
request.session[‘user’] = username 設置數據 |
3.使用session+cookie實現登錄驗證
1.創建登錄驗證的views方法
def (request): |
2.創建相應的裝飾器
def login_required(func): |
3.實現注銷
|
