Flask框架中的session設(shè)置詳解
Flask中的session
session設(shè)置
Flask除請求對象之外,還有一個 session 對象。
它允許你在不同請求間存儲特定用戶的信息。它是在 Cookies 的基礎(chǔ)上實(shí)現(xiàn)的,并且對 Cookies 進(jìn)行密鑰簽名要使用會話,你需要設(shè)置一個密鑰。
我們知道,在django中的session是存儲在服務(wù)器中的數(shù)據(jù)庫中的,也就是django_session表中,而flask中的session是交由客戶端保管的,也就是存儲在本地的cookie中。
session的方法:
- session['username'] = 'stzz';設(shè)置session
- session.pop("username",None);刪除session
關(guān)于session的設(shè)置
app.session_cookie_name = "I am not Session"
其他配置
'SESSION_COOKIE_NAME': 'session', # 設(shè)置session的名字 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, # 是否每次都跟新 'PERMANENT_SESSION_LIFETIME': timedelta(days=31) # 設(shè)置session的過期時間
cookies中的session
cookies 中 session 存儲的是通過 secret_key 加密后的 key , 通過這個 key 從flask程序的內(nèi)存中找到用戶對應(yīng)的session信息
session序列化機(jī)制
當(dāng)我們開啟session時,設(shè)置session["username"]="stzz",flask會幫我們創(chuàng)建一個字典{"username":"stzz"},然后通過secret_key + 時間戳 + 簽名經(jīng)過加密生成一個字符串。
session反序列化機(jī)制
當(dāng)客戶端發(fā)送請求時,request請求會帶上cookie,也就是session中的數(shù)據(jù)存儲在其中,這個數(shù)據(jù)就是之前加密后的字符串,發(fā)送到后端后,flask會通過secret_key去解密session中的加密字符串,從而獲取{"username":"stzz"}從而來驗(yàn)證是否登錄。
session的使用和驗(yàn)證
from flask.blueprints import Blueprint
from flask import Response, session
from flask_restful import fields, marshal
from flask_sqlalchemy.query import Query
from sqlalchemy import or_, and_
from ..model.UserModel import User
import json
user_bp = Blueprint("user", __name__, url_prefix="/user")
user_fields = {
"id": fields.Integer,
"username": fields.String,
"password": fields.String,
"age": fields.Integer
}
@user_bp.route("/hello")
def hello():
result = User.query.filter(or_(User.username.startswith("王"), and_(User.username == "王天祥", User.age > 21)))
return marshal(result.all(), fields=user_fields)
@user_bp.route("/setSession", methods=["GET", "POST"])
def setSession():
session["name"] = "STZZ"
return "設(shè)置session成功?。?!"
@user_bp.route("/getSession")
def getSession():
username = session.get("name")
if username:
return username
else:
return "用戶未登錄!!!"到此這篇關(guān)于Flask框架中的session設(shè)置詳解的文章就介紹到這了,更多相關(guān)Flask session內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# DataGridView行列轉(zhuǎn)換的具體實(shí)現(xiàn)
本文主要介紹了C# DataGridView行列轉(zhuǎn)換的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
使用Python3編寫抓取網(wǎng)頁和只抓網(wǎng)頁圖片的腳本
這篇文章主要介紹了使用Python3編寫抓取網(wǎng)頁和只抓網(wǎng)頁圖片的腳本,使用到了urllib模塊,需要的朋友可以參考下2015-08-08
Python+PyQt5實(shí)現(xiàn)數(shù)據(jù)庫表格動態(tài)增刪改
這篇文章主要為大家介紹如何利用Python中的PyQt5模塊實(shí)現(xiàn)對數(shù)據(jù)庫表格的動態(tài)增刪改,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-03-03
跟老齊學(xué)Python之玩轉(zhuǎn)字符串(2)
上一篇文章章中已經(jīng)講到連接兩個字符串的一種方法,本文繼續(xù)講訴連接字符串的方法2,字符串復(fù)制,字符串長度,字符大小寫的轉(zhuǎn)換,希望對大家有所幫助。2014-09-09

