您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)flask框架中cookie和session的使用方法的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
Session是在服務(wù)器端保存的一個數(shù)據(jù)結(jié)構(gòu),用來跟蹤用戶的狀態(tài),這個數(shù)據(jù)可以保存在集群、數(shù)據(jù)庫、文件中。Cookie是客戶端保存用戶信息的一種機(jī)制,用來記錄用戶的一些信息,也是實(shí)現(xiàn)Session的一種方式。
由于HTTP協(xié)議是無狀態(tài)的協(xié)議,所以服務(wù)端需要記錄用戶的狀態(tài)時,就需要用某種機(jī)制來識具體的用戶,這個機(jī)制就是Session.典型的場景比如購物車,當(dāng)你點(diǎn)擊下單按鈕時,由于HTTP協(xié)議無狀態(tài),所以并不知道是哪個用戶操作的,所以服務(wù)端要為特定的用戶創(chuàng)建了特定的Session,用用于標(biāo)識這個用戶,并且跟蹤用戶,這樣才知道購物車?yán)锩嬗袔妆緯?。這個Session是保存在服務(wù)端的,有一個唯一標(biāo)識。
服務(wù)端如何識別特定的客戶?這個時候Cookie就登場了。每次HTTP請求的時候,客戶端都會發(fā)送相應(yīng)的Cookie信息到服務(wù)端。實(shí)際上大多數(shù)的應(yīng)用都是用 Cookie 來實(shí)現(xiàn)Session跟蹤的,第一次創(chuàng)建Session的時候,服務(wù)端會在HTTP協(xié)議中告訴客戶端,需要在 Cookie 里面記錄一個Session ID,以后每次請求把這個會話ID發(fā)送到服務(wù)器,我就知道你是誰了。
Cookie其實(shí)還可以用在一些方便用戶的場景下,設(shè)想你某次登陸過一個網(wǎng)站,下次登錄的時候不想再次輸入賬號了,怎么辦?這個信息可以寫到Cookie里面,訪問網(wǎng)站的時候,網(wǎng)站頁面的腳本可以讀取這個信息,就自動幫你把用戶名給填了,能夠方便一下用戶。這也是Cookie名稱的由來,給用戶的一點(diǎn)甜頭。
flask中的session機(jī)制是將敏感數(shù)據(jù)加密后放入session,然后將session存入cookie,下次請求時,直接從瀏覽器發(fā)過來的cookie中獲取session,再從中獲取數(shù)據(jù)進(jìn)行解密
這樣操作更節(jié)省服務(wù)開銷,因?yàn)閿?shù)據(jù)均存儲到客戶端
大家可能會擔(dān)心這種做法的安全性,因?yàn)閿?shù)據(jù)全部存儲在本地瀏覽器,很容易被盜取,但是安全性總是相對的,而且flask里面對session也有自己的特殊加密算法,所以也不用太過于在意安全方面的問題
1.使用sessiom需要先導(dǎo)入session
from flask import session
2.SECRET_KEY
一定記得要設(shè)置SECRET_KEY,用于加密數(shù)據(jù),并且如果每次啟動服務(wù)器你的秘鑰都在變化的話就不能再用之前的SECRET_KEY進(jìn)行解密了,我們此處就可以將它設(shè)置成固定值,對于配置文件里面變量的設(shè)置,前文講過,如果數(shù)據(jù)量比較多就單獨(dú)在config.py里面集成,但是如果只是很微量的幾條設(shè)置,那么就可以在主文件里簡單進(jìn)行指令設(shè)置即可,類似這里的:
#生成隨機(jī)的24位字符串 app.config['SECRET_KEY'] = os.urandom(24)
3.session值添加
因?yàn)閟ession和cookie都是鍵值對形式的字典,所以直接用字典方法添加就可以了
session['username'] = 'user1'
4.session值刪除
#1.單條刪除 session.pop('username') del session['username'] #2. 全部清除 session.clear()
5.session值獲取
session.get('username') session['username']
6.設(shè)置過期時間(如果不設(shè)置,默認(rèn)瀏覽器退出即自動結(jié)束)
#在config.py中配置session參數(shù)PERMANENT_SESSION_LIFETIME,這個值的數(shù)據(jù)類型是datetime.timedelay類型 app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) session.permanent = True #默認(rèn)為31天
1. 設(shè)置cookie:
設(shè)置cookie,默認(rèn)有效期是臨時cookie,瀏覽器關(guān)閉就失效
可以通過 max_age 設(shè)置有效期, 單位是秒
resp = make_response("success") # 設(shè)置響應(yīng)體 resp.set_cookie("Itcast_1", "python_1", max_age=3600)
2.獲取cookie
獲取cookie,通過reques.cookies的方式, 返回的是一個字典,可以獲取字典里的相應(yīng)的值
cookie_1 = request.cookies.get("Itcast_1")
3.刪除cookie
這里的刪除只是讓cookie過期,并不是直接刪除cookie
刪除cookie,通過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)有效期是臨時cookie,瀏覽器關(guān)閉就失效 可以通過 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,通過reques.cookies的方式, 返回的是一個字典,可以用get的方式 """ cookie_1 = request.cookies.get("Itcast_1") # 獲取名字為Itcast_1對應(yīng)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)
感謝各位的閱讀!關(guān)于“flask框架中cookie和session的使用方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。