日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Flask框架中的session設(shè)置詳解_python

作者:雙天至尊-王天龍 ? 更新時(shí)間: 2023-06-04 編程語言

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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新