Flask 入門(mén)系列 Cookie與session的介紹
一、Cookie的使用
1、什么是Cookie
我們都知道,HTTP
協(xié)議是無(wú)狀態(tài)的,也就是說(shuō),在一次請(qǐng)求響應(yīng)結(jié)束后,服務(wù)端不會(huì)保留任何對(duì)方狀態(tài)的信息,對(duì)于某些需要保留的信息,可以通過(guò) Cookie
技術(shù)來(lái)完成,通過(guò)在請(qǐng)求和響應(yīng)報(bào)文中添加 Cookie
數(shù)據(jù)來(lái)保存客戶端的狀態(tài)信息。
Web 服務(wù)器為了存儲(chǔ)某些數(shù)據(jù)(比如用戶信息) 而保存在瀏覽器上的小型文本數(shù)據(jù),瀏覽器會(huì)在一定時(shí)間內(nèi)保存它,在下次向該服務(wù)器發(fā)送請(qǐng)求時(shí)附帶這些數(shù)據(jù),Cookie
通常被用來(lái)進(jìn)行用戶會(huì)話管理(比如用戶的登錄狀態(tài)),保存用戶的一些信息。
2、在Flask中使用Cookie
在 Flask
中,如果想要在響應(yīng)中添加一個(gè) cookie
,可以使用 response
對(duì)象的set_cookie()
方法。
set_ cookie()方法的參數(shù)如下:
key
:cookie
鍵名value
:cookie
值max_age
:cookie
被保存的時(shí)間,單位:秒expires
:具體的過(guò)期時(shí)間- path:限制
cookie
可用的路徑,默認(rèn)為整個(gè)域名 domain
:cookie
可用的域名secure
:設(shè)置為True
,只有通過(guò) HTTPS 才可使用httponly
:設(shè)置為True
,禁止客戶端 js 獲取cookie
具體使用如下:
@app.route('user/<name>') def user(name): response = make_response('hello {}'.format(name), 200) response.set_cookie("name", name) return response
在 Flask
中,Cookie
可以通過(guò) request
請(qǐng)求對(duì)象 cookies
屬性獲取。
@app.route('/hello') def hello(): user = request.args.get('name') if not user: user = request.cookies.get("name", 'default') return 'Hello {}!'.format(user)
二、session的使用
1、什么是session
session
指用戶會(huì)話,會(huì)話可以用來(lái)保存當(dāng)前請(qǐng)求的一些狀態(tài),以便于在請(qǐng)求之前共享信息。session是存儲(chǔ)在服務(wù)端的,通過(guò)唯一標(biāo)識(shí)區(qū)分用戶 session,即 session id
,一般情況下,session id
是存在 Cookie
中的,服務(wù)端可以獲取 Cookie
中的 session id
來(lái)獲取用戶 session
。
2、Flask中的session對(duì)象
我們了解了 Cookie
最重要的功能是用來(lái)保存客戶端用戶的狀態(tài)信息。但是存在這樣一個(gè)問(wèn)題,Cookie 是保存在客戶端的,在瀏覽器中可以輕易的添加和修改 Cookie
,而且如果把用戶的狀態(tài)信息以明文的方式存儲(chǔ)在 Cookie
里的話,那么就可以通過(guò)偽造 Cookie 信息來(lái)偽造別人的用戶信息,從而獲取一些權(quán)限。為了避免這個(gè)問(wèn)題,我們要對(duì)敏感的 Cookie 內(nèi)容進(jìn)行加密。Flask 提供了 session
對(duì)象就是用來(lái)將 Cookie 數(shù)據(jù)加密存儲(chǔ)的。
3、在Flask中使用session
session
需要通過(guò)密鑰對(duì)數(shù)據(jù)進(jìn)行簽名以加密數(shù)據(jù),因此,需要先設(shè)置一個(gè)密鑰app.secret_key
,這里設(shè)置的密鑰只是一個(gè)簡(jiǎn)單示例,在生產(chǎn)環(huán)境中,必須要隨機(jī)生成的密鑰,保證秘鑰的復(fù)雜度度和隨機(jī)性,才更安全。
# 設(shè)置密鑰 app.secret_key = 'qwertyuiop' @app.route('/user', methods=['POST', 'GET']) def user(): if request.method == 'POST': user = request.form['user_name'] session['user_name'] = request.form['user_name'] return 'Hello {}!'.format(user) else: if 'user_name' in session: return 'Hello {}!'.format(session["user_name"])
session
對(duì)象的使用就跟字典一樣,如上,用戶使用POST請(qǐng)求登錄后,在 session
中保存用戶名,下次再使用GET請(qǐng)求時(shí),不傳遞任何信息,也可以在 session
中獲取該用戶的信息。
想要清除 session 指定信息的話,例如用戶名,可以使用 session.pop("user_name", None)
,清除全部的話可以使用session.clear()
。
到此這篇關(guān)于 Flask 入門(mén)系列 Cookie與session
的介紹的文章就介紹到這了,更多相關(guān) Flask? Cookie與session內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python標(biāo)準(zhǔn)庫(kù)re的使用舉例(正則化匹配)
正則表達(dá)式re是內(nèi)置函數(shù),通過(guò)一定的匹配規(guī)則獲取指定的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python標(biāo)準(zhǔn)庫(kù)re的使用舉例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10pandas.read_csv參數(shù)詳解(小結(jié))
這篇文章主要介紹了pandas.read_csv參數(shù)詳解(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Python3內(nèi)置模塊之json編解碼方法小結(jié)【推薦】
這篇文章主要介紹了Python3內(nèi)置模塊之json編解碼方法小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05抵御代碼復(fù)雜性使python函數(shù)更加Pythonic技巧示例詳解
這篇文章主要介紹了抵御代碼復(fù)雜性使python函數(shù)更加Pythonic技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01python內(nèi)建類型與標(biāo)準(zhǔn)類型
這篇文章主要介紹了python內(nèi)建類型與標(biāo)準(zhǔn)類型,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08opencv用VS2013調(diào)試時(shí)用Image Watch插件查看圖片
本文主要介紹了opencv用VS2013調(diào)試時(shí)用Image Watch插件查看圖片,直接以圖片形式可視化了opencv中的Mat變量。感興趣的可以了解下2021-07-07簡(jiǎn)單學(xué)習(xí)Python time模塊
這篇文章主要和大家一起簡(jiǎn)單學(xué)習(xí)一下Python time模塊,Python time模塊提供了一些用于管理時(shí)間和日期的C庫(kù)函數(shù),對(duì)time模塊感興趣的小伙伴們可以參考一下2016-04-04