文章介紹了flask框架中的cookie和session。Session是在服務(wù)器端保存的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)跟蹤用戶(hù)的狀態(tài),這個(gè)數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫(kù)、文件中。Cookie是客戶(hù)端保存用戶(hù)信息的一種機(jī)制,用來(lái)記錄用戶(hù)的一些信息,也是實(shí)現(xiàn)Session的一種方式。
WEB -> cookie session
由于HTTP協(xié)議是無(wú)狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶(hù)的狀態(tài)時(shí),就需要用某種機(jī)制來(lái)識(shí)具體的用戶(hù),這個(gè)機(jī)制就是Session.典型的場(chǎng)景比如購(gòu)物車(chē),當(dāng)你點(diǎn)擊下單按鈕時(shí),由于HTTP協(xié)議無(wú)狀態(tài),所以并不知道是哪個(gè)用戶(hù)操作的,所以服務(wù)端要為特定的用戶(hù)創(chuàng)建了特定的Session,用用于標(biāo)識(shí)這個(gè)用戶(hù),并且跟蹤用戶(hù),這樣才知道購(gòu)物車(chē)?yán)锩嬗袔妆緯?shū)。這個(gè)Session是保存在服務(wù)端的,有一個(gè)唯一標(biāo)識(shí)。
服務(wù)端如何識(shí)別特定的客戶(hù)?這個(gè)時(shí)候Cookie就登場(chǎng)了。每次HTTP請(qǐng)求的時(shí)候,客戶(hù)端都會(huì)發(fā)送相應(yīng)的Cookie信息到服務(wù)端。實(shí)際上大多數(shù)的應(yīng)用都是用 Cookie 來(lái)實(shí)現(xiàn)Session跟蹤的,第一次創(chuàng)建Session的時(shí)候,服務(wù)端會(huì)在HTTP協(xié)議中告訴客戶(hù)端,需要在 Cookie 里面記錄一個(gè)Session ID,以后每次請(qǐng)求把這個(gè)會(huì)話(huà)ID發(fā)送到服務(wù)器,我就知道你是誰(shuí)了。
Cookie其實(shí)還可以用在一些方便用戶(hù)的場(chǎng)景下,設(shè)想你某次登陸過(guò)一個(gè)網(wǎng)站,下次登錄的時(shí)候不想再次輸入賬號(hào)了,怎么辦?這個(gè)信息可以寫(xiě)到Cookie里面,訪問(wèn)網(wǎng)站的時(shí)候,網(wǎng)站頁(yè)面的腳本可以讀取這個(gè)信息,就自動(dòng)幫你把用戶(hù)名給填了,能夠方便一下用戶(hù)。這也是Cookie名稱(chēng)的由來(lái),給用戶(hù)的一點(diǎn)甜頭。
flask中的session和cookie
flask中的session機(jī)制是將敏感數(shù)據(jù)加密后放入session,然后將session存入cookie,下次請(qǐng)求時(shí),直接從瀏覽器發(fā)過(guò)來(lái)的cookie中獲取session,再?gòu)闹蝎@取數(shù)據(jù)進(jìn)行解密
這樣操作更節(jié)省服務(wù)開(kāi)銷(xiāo),因?yàn)閿?shù)據(jù)均存儲(chǔ)到客戶(hù)端
大家可能會(huì)擔(dān)心這種做法的安全性,因?yàn)閿?shù)據(jù)全部存儲(chǔ)在本地瀏覽器,很容易被盜取,但是安全性總是相對(duì)的,而且flask里面對(duì)session也有自己的特殊加密算法,所以也不用太過(guò)于在意安全方面的問(wèn)題
Session操作
1.使用sessiom需要先導(dǎo)入session
from flask import session
2.SECRET_KEY
一定記得要設(shè)置SECRET_KEY,用于加密數(shù)據(jù),并且如果每次啟動(dòng)服務(wù)器你的秘鑰都在變化的話(huà)就不能再用之前的SECRET_KEY進(jìn)行解密了,我們此處就可以將它設(shè)置成固定值,對(duì)于配置文件里面變量的設(shè)置,前文講過(guò),如果數(shù)據(jù)量比較多就單獨(dú)在config.py里面集成,但是如果只是很微量的幾條設(shè)置,那么就可以在主文件里簡(jiǎn)單進(jìn)行指令設(shè)置即可,類(lèi)似這里的:
#生成隨機(jī)的24位字符串
app.config['SECRET_KEY'] = os.urandom(24)
3.session值添加
因?yàn)閟ession和cookie都是鍵值對(duì)形式的字典,所以直接用字典方法添加就可以了
session['username'] = 'user1'
4.session值刪除
#1.單條刪除
session.pop('username')
del session['username']
#2. 全部清除
session.clear()
5.session值獲取
session.get('username')
session['username']
6.設(shè)置過(guò)期時(shí)間(如果不設(shè)置,默認(rèn)瀏覽器退出即自動(dòng)結(jié)束)
#在config.py中配置session參數(shù)PERMANENT_SESSION_LIFETIME,這個(gè)值的數(shù)據(jù)類(lèi)型是datetime.timedelay類(lèi)型
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
session.permanent = True #默認(rèn)為31天
在Flask中對(duì)cookie的處理
1. 設(shè)置cookie:
設(shè)置cookie,默認(rèn)有效期是臨時(shí)cookie,瀏覽器關(guān)閉就失效
可以通過(guò) max_age 設(shè)置有效期, 單位是秒
resp = make_response("success") # 設(shè)置響應(yīng)體
resp.set_cookie("Itcast_1", "python_1", max_age=3600)
2.獲取cookie
獲取cookie,通過(guò)reques.cookies的方式, 返回的是一個(gè)字典,可以獲取字典里的相應(yīng)的值
cookie_1 = request.cookies.get("Itcast_1")
3.刪除cookie
這里的刪除只是讓cookie過(guò)期,并不是直接刪除cookie
刪除cookie,通過(guò)delete_cookie()的方式, 里面是cookie的名字
resp = make_response("del success") # 設(shè)置響應(yīng)體
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")
'''
設(shè)置cookie,默認(rèn)有效期是臨時(shí)cookie,瀏覽器關(guān)閉就失效
可以通過(guò) max_age 設(shè)置有效期, 單位是秒
'''''
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,通過(guò)reques.cookies的方式,
返回的是一個(gè)字典,可以用get的方式
"""
cookie_1 = request.cookies.get("Itcast_1") # 獲取名字為Itcast_1對(duì)應(yīng)cookie的值
return cookie_1
@app.route("/delete_cookie")
def delete_cookie():
"""
刪除cookie,通過(guò)delete_cookie()的方式,
里面是cookie的名字
這里的刪除只是讓cookie過(guò)期,并不是直接刪除cookie
"""
resp = make_response("del success")
resp.delete_cookie("Itcast1")
return resp
if __name__ == '__main__':
app.run(debug=True)
到此這篇關(guān)于flask框架中的cookie和session使用的文章就介紹到這了,更多相關(guān)flask cookie和session內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Flask框架重定向,錯(cuò)誤顯示,Responses響應(yīng)及Sessions會(huì)話(huà)操作示例
- flask session組件的使用示例
- Flask之flask-session的具體使用
- flask使用session保存登錄狀態(tài)及攔截未登錄請(qǐng)求代碼