Django中Cookie搭配Session使用實踐
Cookie的作用
前面我們說道Django實戰006:Cookie設置及跨域問題處理,Cookie可以在瀏覽器端保存用戶數據,當用戶訪問服務器時會提交Cookie給服務器,Cookie附加瞭當前狀態, 服務器可以通過Cookie來標識用戶的登錄狀態,起到簡單的用戶身份識別和用戶信息記錄等作用。
Cookie登錄的實現過程
1.用戶通過form表單提交自己的用戶名和密碼,這通常是一個POST的 HTTP請求。
2.服務器拿到用戶的信息開始驗證用戶名與密碼,如果與數據庫匹配成功我們就返回200同時設置一個Set-Cookie拋給瀏覽器,通過為‘鍵’=‘值’形式 。
3.瀏覽器接收到服務器響應返回的數據和Cookie,然後將Cookie存起來,在開發者application中可以查看到。
4.瀏覽器再次發送請求時,將設置瞭‘鍵’=‘值’的Cookie再次拋給服務器,服務器通過Cookie的
字段判斷用戶已經登錄,則根據需求處理用戶請求,否則返回400提示用戶先登錄。
Cookie的安全隱患
這就是Cookie的實現過程,這裡有個很明顯的問題就是服務器隻要識別到正確的Cookie就會處理對應的數據,那麼有心人隻要想辦法截獲(很多HTTP客戶端軟件都可以發送任意的HTTP請求)你的Cookie就可以冒充用戶來訪問該服務器並獲取到用戶的所有信息,這對用戶來說會存在著極大的安全隱患。
Session的引進
session和cookie功能差不多,同樣是用來記錄用戶信息和維持會話狀態的,但是session是依賴cookie的。session不同在於將用戶數據存儲在服務器端(用戶拿到session內的具體內容),Cookie則是將數據存儲在瀏覽器端,所以相對cookie來說,session相對安全多瞭,我們隻需要在設置Cookie時附帶上session的id,當用戶再次訪問服務器時將session的id拋給服務器進行效驗。
Session的啟用
Django中使用session很簡單,Django封裝瞭session
模塊,默認在我們創建項目的時候就已經啟用瞭,在數據庫中可以找到一個名為django_session的數據庫表,這個就是用來存放session數據的。
Session的使用
設置保存session數據,通過reques.session[‘鍵’]=’值’的方式來設置指定存儲的session信息,通過瀏覽器訪問該視圖就可以將session設置的信息以base64編碼存入到django_session數據庫表中。
讀取session數據,同樣很簡單通過request.session.get(‘鍵’)來獲取對應的值,通過該方法可以從django_session數據庫表中讀取到對應鍵的值。
Session搭配Cookie使用
在cookie中傳入sessionid作為前端的存儲值,這裡為瞭保證sessionid的唯一性,我最簡單的方法是用uuid來生成隨機字符串,再在sessionid中設置session值,再給set_cookie設置個過期時間,這樣隻要時間一到又會重新生成一個新的sessionid來(如果你覺得uuid4()還是會出現重復也可以自行定義)。
在瀏覽器端看到的就是一串隨機的字符串,當用戶訪問服務器時cookie會把sessionid拋給服務器,服務器驗證sessionid對應的值是否為django_session數據庫表中讀取到對應鍵的值,如果是則執行數據請求操作,否則返回400,告訴前端操作失敗。
到此這篇關於Django中Cookie搭配Session使用實踐的文章就介紹到這瞭,更多相關Django Cookie搭配Session內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- java開發web前端cookie session及token會話機制詳解
- Django 狀態保持搭配與存儲的實現
- Flask 入門系列 Cookie與session的介紹
- Java Session會話追蹤原理深入分析
- flask框架中的cookie和session使用