flask模块之session()方法

Flask 的 session 是基于 Werkzeug 实现的类字典对象,用于在请求间存储用户状态(默认加密存储在客户端 Cookie 中)。以下是 Flask session 核心方法 / 操作的完整汇总,涵盖取值、赋值、删除、校验、配置等全场景。

一、基础操作:取值 / 赋值 / 判断

1、 赋值:设置 Session 键值对

直接通过「键 = 值」赋值,支持所有可序列化数据(字符串、数字、列表、字典等,不支持对象 / 函数)

python 复制代码
from flask import Flask, session

app = Flask(__name__)
app.secret_key = "your_strong_secret_key"  # 必须设置加密秘钥

@app.route("/set")
def set_session():
    # 基础类型
    session["username"] = "admin"
    session["age"] = 25
    session["is_vip"] = True
    # 复杂类型(需可序列化)
    session["hobbies"] = ["coding", "reading"]
    session["profile"] = {"city": "Wuhan", "phone": "13800138000"}
    return "Session 设置成功"

2、取值

python 复制代码
方法	                                       说明	                                  示例
session[key]	                 直接取值,键不存在抛 KeyError	                name = session["username"]
session.get(key[, default])	     安全取值,键不存在返回 None/ 自定义默认值	        age = session.get("age", 0)

3、判断键是否存在

python 复制代码
@app.route("/check")
def check_session():
    # 方式1:in 关键字(推荐)
    if "username" in session:
        return f"存在 username:{session['username']}"
    # 方式2:get() 判断 None
    if session.get("is_vip") is not None:
        return "VIP 状态已设置"
    return "未找到指定 Session 键"

二、删除 / 清空操作:移除 Session 数据

1、删除单个键

python 复制代码
方法	                                    说明	                                 示例
del session[key]	            直接删除,键不存在抛 KeyError	             del session["username"]
session.pop(key[, default])	    安全删除,返回键值,键不存在返回默认值	      age = session.pop("age", 0)

2、 清空所有 Session

python 复制代码
@app.route("/clear")
def clear_session():
    # 方式1:clear() 方法(推荐)
    session.clear()
    return "所有 Session 已清空"

3、登出场景(典型示例)

python 复制代码
@app.route("/logout")
def logout():
    # 直接清空session
    session.clear()
    return "登出成功"

三、配置相关:Session 安全与存储

python 复制代码
配置项	                                    说明	                                 示例值
SECRET_KEY	                     加密 Session 的秘钥(必须设置)	           os.urandom(24)(随机强秘钥)
PERMANENT_SESSION_LIFETIME	     持久化 Session 过期时间	                   timedelta(days=7)
SESSION_COOKIE_NAME	             Session Cookie 的名称(默认:session)	   "flask_session"
SESSION_COOKIE_SECURE	         仅 HTTPS 传输 Cookie(生产环境推荐)	       True
SESSION_COOKIE_HTTPONLY	         禁止 JS 访问 Cookie(防 XSS,推荐)	       True
SESSION_COOKIE_SAMESITE	         限制 Cookie 跨域发送(防 CSRF)	          "Lax"/"Strict"

示例:

python 复制代码
import os
from datetime import timedelta

app = Flask(__name__)
# 随机强秘钥(生产环境从环境变量读取)
app.secret_key = os.environ.get("FLASK_SECRET_KEY") or os.urandom(24)
# 持久化过期时间
app.permanent_session_lifetime = timedelta(days=1)
# 安全配置
app.config["SESSION_COOKIE_SECURE"] = True  # 仅 HTTPS
app.config["SESSION_COOKIE_HTTPONLY"] = True  # 防 XSS
app.config["SESSION_COOKIE_SAMESITE"] = "Lax"  # 防 CSRF

四、方法速查表(汇总)

python 复制代码
操作类型	                     方法 / 语法	                   核心作用
赋值	           session[key] = value	               设置 Session 键值对
取值	           session.get(key[, default])	       安全取值,避免 KeyError
判断存在	           key in session	                   检查键是否存在
删除单个键	       session.pop(key[, default])	       安全删除键并返回值
清空所有	           session.clear()	                   清空全部 Session 数据
持久化配置	       session.permanent = True	           标记 Session 持久化
手动更新	           session.modified = True	           强制标记 Session 已修改
获取SessionID      session.sid	                       获取当前 Session 唯一标识
相关推荐
belldeep18 小时前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask
B站_计算机毕业设计之家18 小时前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法
森焱森19 小时前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
B站_计算机毕业设计之家19 小时前
豆瓣电影数据可视化分析系统 | Python Flask框架 requests Echarts 大数据 人工智能 毕业设计源码(建议收藏)✅
大数据·python·机器学习·数据挖掘·flask·毕业设计·echarts
沈浩(种子思维作者)2 天前
系统要活起来就必须开放包容去中心化
人工智能·python·flask·量子计算
B站_计算机毕业设计之家2 天前
豆瓣电影数据采集分析推荐系统 | Python Vue Flask框架 LSTM Echarts多技术融合开发 毕业设计源码 计算机
vue.js·python·机器学习·flask·echarts·lstm·推荐算法
玄同7652 天前
Python 后端三剑客:FastAPI/Flask/Django 对比与 LLM 开发选型指南
人工智能·python·机器学习·自然语言处理·django·flask·fastapi
乔江seven3 天前
【Flask 进阶】3 从同步到异步:基于 Redis 任务队列解决 API 高并发与长耗时任务阻塞
redis·python·flask
云和数据.ChenGuang3 天前
python 面向对象基础入门
开发语言·前端·python·django·flask
Leinwin4 天前
Moltbot 部署至 Azure Web App 完整指南:从本地到云端的安全高效跃迁
后端·python·flask