flask 中怎樣使用session和cookie使使用者保持登入一段時間?

時間 2021-08-12 02:02:48

1樓:芒果

Response

.set_cookie

(key

,//鍵

value=''

,//值

max_age

=None

,//秒為單位的cookie壽命,None表示http-only

expires

=None

,//失效時間,datetime物件或unix時間戳

path

='/'

,//cookie的有效路徑

domain

=None

,//cookie的有效域

)顯然,如果要設定cookie,我們要自行構造Response物件,而不是交給Flask框架去完成這件事。

示例:在訪問首頁/時設定cookie,並在訪問/page2時讀取cookie:

def index():

rsp = make_response('go page2' % '/page2')

rsp.set_cookie('user','JJJJJohnny')

return rsp

def page2():

user = request.cookies['user']

return 'you are %s' % user

訪問者的標識問題

伺服器需要識別來自同一訪問者的請求。這主要是通過瀏覽器的cookie實現的。 訪問者在第一次訪問伺服器時,伺服器在其cookie中設定乙個唯一的ID號——會話ID。

這樣,訪問者後續對伺服器的訪問頭中將自動包含該資訊,伺服器通過這個ID號,即可區隔不同的訪問者。

Flask框架中,每當乙個請求進來時會自動根據請求中cookie的會話ID建立乙個Session類的例項物件。你可以檢視當前請求的cookie驗證這一點(會話ID的鍵預設為session):

def v_index():

return request.cookies['session']

訪問者資訊的記錄問題

伺服器可以記錄、提取指定訪問者的歷史資訊。對每乙個會話ID,服務端維護乙個 資料上下文,這個資料執行在記憶體中,通常在變化時持久化到檔案系統中或資料庫中。

在檢視函式內,Flask提供了乙個全域性物件session,它始終等效於當前請求所對應的 Session類例項物件。Session類定義了get_item()方法和set_item()方法, 因此我們可以像使用Dict物件一樣,通過操作符讀取或設定會話變數:

if !session['user'return redirect('/login')

return 'some restricted for authorized users only'

由於預設情況下,Flask將會話物件加密後儲存在客戶端的cookie裡,因此必須要為應用例項的secret_key屬性配置乙個加密種子才能使用session:

會話/Session是為Web伺服器建立狀態的乙個成熟模式。會話主要解決兩個問題:

訪問者的標識問題

伺服器需要識別來自同一訪問者的請求。這主要是通過瀏覽器的cookie實現的。 訪問者在第一次訪問伺服器時,伺服器在其cookie中設定乙個唯一的ID號——會話ID。

這樣,訪問者後續對伺服器的訪問頭中將自動包含該資訊,伺服器通過這個ID號,即可區隔不同的訪問者。

Flask框架中,每當乙個請求進來時會自動根據請求中cookie的會話ID建立乙個Session類的例項物件。你可以檢視當前請求的cookie驗證這一點(會話ID的鍵預設為session):

def v_index():

return request.cookies['session']

訪問者資訊的記錄問題

伺服器可以記錄、提取指定訪問者的歷史資訊。對每乙個會話ID,服務端維護乙個 資料上下文,這個資料執行在記憶體中,通常在變化時持久化到檔案系統中或資料庫中。

在檢視函式內,Flask提供了乙個全域性物件session,它始終等效於當前請求所對應的 Session類例項物件。Session類定義了get_item()方法和set_item()方法, 因此我們可以像使用Dict物件一樣,通過操作符讀取或設定會話變數:

if !session['user'return redirect('/login')

return 'some restricted for authorized users only'

由於預設情況下,Flask將會話物件加密後儲存在客戶端的cookie裡,因此必須要為應用例項的secret_key屬性配置乙個加密種子才能使用session:

深入淺出flask_flask教程_匯智網

Flask檔案上傳(二) 使用擴充套件實現

毛茸茸 如何當好一名輔導老師,可以思考以下幾點 1 放手給學生,不斷提高自己的反應速度和理解答疑能力。要成為一名優秀教師,在課堂上,不僅要有很好的傾聽習慣,而且要有機敏的分辨能力和觀察入微的洞察能力,將稍縱即逝的 富有開發生成價值的有效資源,轉化成學生的知識。所以,老師要把目光聚集到課堂上,逐步淡化...

flask下如何使用mysql的幾個相關疑問。。。?

沙吉泉 問題一 比較簡單,似乎樓主也已經解決。問題二 可以使用 SQLAlchemy 的 reflect 來做反射,把你資料庫裡的 schema 對映成 SQLAlchemy 物件。但最好是手寫類去定義 schema 這樣可以統一在一處管理,而且還可以使用強大的 Alembic 來做資料庫遷移。Al...

如何理解Flask中的藍本?

Jaraxuss 個人理解 你的筆記本上有很多介面 USB 電源介面 SD卡槽 耳機孔 HDMI 可插拔檢視 等等 隔壁老王的電腦,就一type C口 藍圖介面 其他的介面只能通過type C的擴充套件塢 在藍圖中新增url規則 再接到電腦上 註冊藍圖 老王下班,直接拔了那一根type C走人 取消...