網(wǎng)站首頁 編程語言 正文
Flask中的session
session設(shè)置
Flask除請(qǐng)求對(duì)象之外,還有一個(gè) session 對(duì)象。
它允許你在不同請(qǐng)求間存儲(chǔ)特定用戶的信息。它是在 Cookies 的基礎(chǔ)上實(shí)現(xiàn)的,并且對(duì) Cookies 進(jìn)行密鑰簽名要使用會(huì)話,你需要設(shè)置一個(gè)密鑰。
我們知道,在django中的session是存儲(chǔ)在服務(wù)器中的數(shù)據(jù)庫中的,也就是django_session表中,而flask中的session是交由客戶端保管的,也就是存儲(chǔ)在本地的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的過期時(shí)間
cookies中的session
cookies 中 session 存儲(chǔ)的是通過 secret_key 加密后的 key , 通過這個(gè) key 從flask程序的內(nèi)存中找到用戶對(duì)應(yīng)的session信息
session序列化機(jī)制
當(dāng)我們開啟session時(shí),設(shè)置session["username"]="stzz",flask會(huì)幫我們創(chuàng)建一個(gè)字典{"username":"stzz"},然后通過secret_key + 時(shí)間戳 + 簽名經(jīng)過加密生成一個(gè)字符串。
session反序列化機(jī)制
當(dāng)客戶端發(fā)送請(qǐng)求時(shí),request請(qǐng)求會(huì)帶上cookie,也就是session中的數(shù)據(jù)存儲(chǔ)在其中,這個(gè)數(shù)據(jù)就是之前加密后的字符串,發(fā)送到后端后,flask會(huì)通過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 "用戶未登錄!!!"
原文鏈接:https://blog.csdn.net/wtl1992/article/details/129145880
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-11-05 GO?CountMinSketch計(jì)數(shù)器(布隆過濾器思想的近似計(jì)數(shù)器)_Golang
- 2022-05-11 pg分區(qū)表的實(shí)踐
- 2022-09-06 Go?語言選擇器實(shí)例教程_Golang
- 2022-05-04 python中的PywebIO模塊制作一個(gè)數(shù)據(jù)大屏_python
- 2022-02-14 Uncaught TypeError: Failed to execute ‘a(chǎn)ppendChild
- 2022-04-11 C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序_C#教程
- 2022-05-28 python中數(shù)組和列表的簡(jiǎn)單實(shí)例_python
- 2022-07-15 SQL?Server中執(zhí)行動(dòng)態(tài)SQL_MsSql
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支