简单介绍Flask框架中的session设置

Crq
Crq
管理员
1418
文章
0
粉丝
Linux教程评论4字数 559阅读1分51秒阅读模式
摘要Flask是一个使用Python编写的轻量级Web应用框架。其WSGI工具箱采用Werkzeug,模板引擎则使用 Jinja2 。Flask使用BSD授权。Flask也被称为 “m...
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 "用户未登录!!!"

    到此这篇关于Flask框架中的session设置详解的文章就介绍到这了

    weinxin
    我的微信
    微信号已复制
    我的微信
    这是我的微信扫一扫
     
    Crq
    • 本文由 Crq 发表于2025年1月16日 09:08:02
    • 转载请注明:https://www.cncrq.com/12627.html
    cp 快捷命令:复制文件到多个目录 Linux教程

    cp 快捷命令:复制文件到多个目录

    在学习 Linux 的过程中,对于新手而言总是会使用几个命令来完成一个简单的任务。对正在熟悉使用终端的人这是很容易理解的行为。然而,如果你想要成为一个老手,学习我说的“快捷命令”会...
    匿名

    发表评论

    匿名网友
    :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
    确定

    拖动滑块以完成验证