Flask框架中的session设置详解

目录

Flask中的session

session设置

Flask除请求对象之外,还有一个 session 对象。

它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设置一个密钥。

我们知道,在django中的session是存储在服务器中的数据库中的,也就是django_session表中,而flask中的session是交由客户端保管的,也就是存储在本地的cookie中。

session的方法:

  • session['username'] = 'stzz';设置session
  • session.pop("username",None);删除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 \"用户未登录!!!\"
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容