flask框架中的cookie和session使用
文章介紹瞭flask框架中的cookie和session。Session是在服務器端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據可以保存在集群、數據庫、文件中。Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式。
WEB -> cookie & session
由於HTTP協議是無狀態的協議,所以服務端需要記錄用戶的狀態時,就需要用某種機制來識具體的用戶,這個機制就是Session.典型的場景比如購物車,當你點擊下單按鈕時,由於HTTP協議無狀態,所以並不知道是哪個用戶操作的,所以服務端要為特定的用戶創建瞭特定的Session,用用於標識這個用戶,並且跟蹤用戶,這樣才知道購物車裡面有幾本書。這個Session是保存在服務端的,有一個唯一標識。
服務端如何識別特定的客戶?這個時候Cookie就登場瞭。每次HTTP請求的時候,客戶端都會發送相應的Cookie信息到服務端。實際上大多數的應用都是用 Cookie 來實現Session跟蹤的,第一次創建Session的時候,服務端會在HTTP協議中告訴客戶端,需要在 Cookie 裡面記錄一個Session ID,以後每次請求把這個會話ID發送到服務器,我就知道你是誰瞭。
Cookie其實還可以用在一些方便用戶的場景下,設想你某次登陸過一個網站,下次登錄的時候不想再次輸入賬號瞭,怎麼辦?這個信息可以寫到Cookie裡面,訪問網站的時候,網站頁面的腳本可以讀取這個信息,就自動幫你把用戶名給填瞭,能夠方便一下用戶。這也是Cookie名稱的由來,給用戶的一點甜頭。
flask中的session和cookie
flask中的session機制是將敏感數據加密後放入session,然後將session存入cookie,下次請求時,直接從瀏覽器發過來的cookie中獲取session,再從中獲取數據進行解密
這樣操作更節省服務開銷,因為數據均存儲到客戶端
大傢可能會擔心這種做法的安全性,因為數據全部存儲在本地瀏覽器,很容易被盜取,但是安全性總是相對的,而且flask裡面對session也有自己的特殊加密算法,所以也不用太過於在意安全方面的問題
Session操作
1.使用sessiom需要先導入session
from flask import session
2.SECRET_KEY
一定記得要設置SECRET_KEY,用於加密數據,並且如果每次啟動服務器你的秘鑰都在變化的話就不能再用之前的SECRET_KEY進行解密瞭,我們此處就可以將它設置成固定值,對於配置文件裡面變量的設置,前文講過,如果數據量比較多就單獨在config.py裡面集成,但是如果隻是很微量的幾條設置,那麼就可以在主文件裡簡單進行指令設置即可,類似這裡的:
#生成隨機的24位字符串 app.config['SECRET_KEY'] = os.urandom(24)
3.session值添加
因為session和cookie都是鍵值對形式的字典,所以直接用字典方法添加就可以瞭
session['username'] = 'user1'
4.session值刪除
#1.單條刪除 session.pop('username') del session['username'] #2. 全部清除 session.clear()
5.session值獲取
session.get('username') session['username']
6.設置過期時間(如果不設置,默認瀏覽器退出即自動結束)
#在config.py中配置session參數PERMANENT_SESSION_LIFETIME,這個值的數據類型是datetime.timedelay類型 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) session.permanent = True #默認為31天
在Flask中對cookie的處理
1. 設置cookie:
設置cookie,默認有效期是臨時cookie,瀏覽器關閉就失效
可以通過 max_age 設置有效期, 單位是秒
resp = make_response("success") # 設置響應體 resp.set_cookie("Itcast_1", "python_1", max_age=3600)
2.獲取cookie
獲取cookie,通過reques.cookies的方式, 返回的是一個字典,可以獲取字典裡的相應的值
cookie_1 = request.cookies.get("Itcast_1")
3.刪除cookie
這裡的刪除隻是讓cookie過期,並不是直接刪除cookie
刪除cookie,通過delete_cookie()的方式, 裡面是cookie的名字
resp = make_response("del success") # 設置響應體 resp.delete_cookie("Itcast1")
示例
from flask import Flask, make_response, request app = Flask(__name__) @app.route("/set_cookie") def set_cookie(): resp = make_response("success") ''' 設置cookie,默認有效期是臨時cookie,瀏覽器關閉就失效 可以通過 max_age 設置有效期, 單位是秒 ''''' resp.set_cookie("Itcast_1", "python_1") resp.set_cookie("Itcast_2", "python_2") resp.set_cookie("Itcast_3", "python_3", max_age=3600) return resp @app.route("/get_cookie") def get_cookie(): """ 獲取cookie,通過reques.cookies的方式, 返回的是一個字典,可以用get的方式 """ cookie_1 = request.cookies.get("Itcast_1") # 獲取名字為Itcast_1對應cookie的值 return cookie_1 @app.route("/delete_cookie") def delete_cookie(): """ 刪除cookie,通過delete_cookie()的方式, 裡面是cookie的名字 這裡的刪除隻是讓cookie過期,並不是直接刪除cookie """ resp = make_response("del success") resp.delete_cookie("Itcast1") return resp if __name__ == '__main__': app.run(debug=True)
到此這篇關於flask框架中的cookie和session使用的文章就介紹到這瞭,更多相關flask cookie和session內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Flask 入門系列 Cookie與session的介紹
- Python Flask前端自動登錄功能實現詳解
- python爬蟲用request庫處理cookie的實例講解
- Flask response響應的具體使用
- Django 狀態保持搭配與存儲的實現