共计 2008 个字符,预计需要花费 6 分钟才能阅读完成。
导读 | Flask 是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug,模板引擎则使用 Jinja2。Flask 使用 BSD 授权。Flask 也被称为“microframework”,因为它使用简单的核心,用 extension 增加其他功能 |
Flask 中的 session
session 设置
Flask 除请求对象之外,还有一个 session 对象。
它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥。
我们知道,在 django 中的 session 是存储在服务器中的数据库中的,也就是 django_session 表中,而 flask 中的 session 是交由客户端保管的,也就是存储在本地的 cookie 中。
session 的方法:
关于 session 的设置
app.session_cookie_name = "I am not Session"
其他配置
'SESSION_COOKIE_NAME': 'session', # 设置 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)
# 设置 session 的过期时间
cookies 中的 session
cookies 中 session 存储的是通过 secret_key 加密后的 key , 通过这个 key 从 flask 程序的内存中找到用户对应的 session 信息
session 序列化机制
当我们开启 session 时,设置 session[“username”]=”stzz”,flask 会帮我们创建一个字典{“username”:”stzz”},然后通过 secret_key + 时间戳 + 签名经过加密生成一个字符串。
session 反序列化机制
当客户端发送请求时,request 请求会带上 cookie,也就是 session 中的数据存储在其中,这个数据就是之前加密后的字符串,发送到后端后,flask 会通过 secret_key 去解密 session 中的加密字符串,从而获取 {“username”:”stzz”} 从而来验证是否登录。
session 的使用和验证
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 "设置 session 成功!!!"
@user_bp.route("/getSession")
def getSession():
username = session.get("name")
if username:
return username
else:
return "用户未登录!!!"
到此这篇关于 Flask 框架中的 session 设置详解的文章就介绍到这了
正文完
星哥说事-微信公众号
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)