from flask_session import Session 为什么是Session(app)这么用?

在 Flask 中,from flask_session import Session 和 Session(app) 的用法是为了配置和使用 Flask-Session 扩展,将用户的会话(Session)数据存储到服务器端(如 Redis、数据库或文件系统),而不是默认的客户端 Cookie 中。

为什么是 Session(app) 这么用?

Flask-Session 的工作机制:

Flask 默认将 Session 数据存储在客户端的 Cookie 中,通过签名确保数据不被篡改,但存在安全性(如数据泄露)和存储限制(Cookie 大小有限)。

Flask-Session 扩展将会话数据存储在服务器端(如 Redis、数据库等),客户端只保存一个 Session ID,安全性更高且支持存储更多数据。

Session(app) 的作用:

Session(app) 是 Flask-Session 扩展的初始化方法,它会将 Flask 应用的默认 Session 机制替换为 Flask-Session 的实现。

通过 Session(app),Flask-Session 会读取 Flask 应用的配置(如 SESSION_TYPE),并初始化相应的存储后端(如 Redis)。

cpp 复制代码
代码示例:

python
复制
from flask import Flask, session
from flask_session import Session

app = Flask(__name__)

# 配置 Flask-Session
app.config['SESSION_TYPE'] = 'redis'  # 使用 Redis 存储 Session
app.config['SESSION_PERMANENT'] = False  # 关闭永久会话
app.config['SESSION_USE_SIGNER'] = True  # 对 Session ID 签名
app.config['SESSION_KEY_PREFIX'] = 'myapp:'  # Redis 键前缀
app.config['SESSION_REDIS'] = 'redis://localhost:6379/0'  # Redis 连接地址

# 初始化 Flask-Session
Session(app)

@app.route('/')
def index():
    # 设置 Session 数据
    session['username'] = 'Alice'
    return 'Session data set!'

@app.route('/get')
def get_session():
    # 获取 Session 数据
    return f"Username: {session.get('username')}"

if __name__ == '__main__':
    app.run(debug=True)

Session(app) 的底层原理

替换 Flask 的 Session 接口:

Flask-Session 通过 Session(app) 替换了 Flask 默认的 Session 接口,将其指向 Flask-Session 的实现。

读取配置:

Session(app) 会读取 Flask 应用的配置(如 SESSION_TYPE、SESSION_REDIS 等),并根据配置初始化存储后端。

Session 数据存储:

当用户访问应用时,Flask-Session 会生成一个唯一的 Session ID,并将其存储在客户端 Cookie 中。

实际的 Session 数据(如 session'username')会被存储在服务器端(如 Redis)。

常见配置选项

配置项 说明

SESSION_TYPE Session 存储类型,如 redis、memcached、filesystem、mongodb 等。

SESSION_REDIS 如果使用 Redis,指定 Redis 连接地址(如 redis://localhost:6379/0)。

SESSION_PERMANENT 是否启用永久会话,默认为 True。

SESSION_USE_SIGNER 是否对 Session ID 签名,默认为 False。

SESSION_KEY_PREFIX 存储在 Redis 中的键前缀,默认为 session:。

SESSION_COOKIE_NAME Session Cookie 的名称,默认为 session。

总结

Session(app) 是 Flask-Session 扩展的初始化方法,用于替换 Flask 默认的 Session 机制。

通过 Session(app),Flask-Session 会根据配置将会话数据存储到服务器端(如 Redis),提升安全性和扩展性。

使用 Flask-Session 可以避免默认 Cookie Session 的限制,适合需要存储大量会话数据或对安全性要求较高的场景。

相关推荐
梦想不只是梦与想1 小时前
大模型系列(二):技术基础与核心能力
python·大模型·token
AC赳赳老秦1 小时前
农产品公开数据应用:OpenClaw 抓取农产品价格、产销公开数据,实现农产品行情动态监测
java·c语言·javascript·python·php·deepseek·openclaw
万年咸鱼2 小时前
Java PrintStream 详解:从基础用法到实战技巧
java·开发语言·python
cui_ruicheng2 小时前
FastAPI 应用开发(二):请求响应、Pydantic 模型与依赖注入
python·fastapi·web
DeepVisionary2 小时前
SoundHound 完成收购 LivePerson:股权对价 4300 万美元,实际总成本约 3.04 亿
python·自动化
deepseek233 小时前
Google Gemini Agentic Video 上线:88% 少 token 的主动取样如何改写长视频理解
python·多模态·ai agent·gemini·视频理解
Zane19943 小时前
只重写了 __eq__,为什么类突然变得不可哈希了?常用魔法方法大盘点
后端·python
2601_962885723 小时前
如何用 Python 做 A 股全市场扫描选股?(多条件筛选实战)
开发语言·python
零域码客3 小时前
一文掌握 jQuery + Flask 全栈核心知识点(前端交互 + 后端接口 + 前后端联调)
前端·python·ajax·flask·jquery·前后端联调·web全栈
BYSJMG3 小时前
计算机毕设选题做什么好?基于大数据的用户美食数据分析与可视化,PySpark预处理+ECharts大屏,含Isolation Forest异常检测算法
大数据·python·信息可视化·数据分析·spark·课程设计·美食