深入理解 Flask 中的 Session 和 Cookies

原文链接:mp.weixin.qq.com/s/g9Gh6jjfy...

在构建 web 应用时,管理用户的状态和数据是至关重要的。Flask,作为一个灵活的微型 web 框架,提供了会话(Session)和 Cookies 管理的能力。本文将深入探讨 Flask 中的会话和 Cookies 的概念、工作机制以及应用实例,为读者提供全面而详细的理解。

会话和 Cookies 的基本概念

Cookies

  • 定义:Cookies 是服务器存储在用户浏览器上的小片段数据,每次浏览器向服务器发送请求时都会附带这些数据。
  • 用途:主要用于记住用户信息(如登录状态)、跟踪用户访问模式等。

会话(Session)

  • 定义:会话是一种在服务器上存储用户数据的方式,用于跨请求保持状态。
  • 用途:常用于存储用户特定的信息,如登录后的用户ID、购物车内容等。

Cookies 的使用

在 Flask 中操作 Cookies 是非常简单直观的。

设置 Cookies

python 复制代码
from flask import Flask, make_response

app = Flask(__name__)

@app.route('/set_cookie')
def set_cookie():
    response = make_response('Cookie has been set')
    response.set_cookie('username', 'John Doe')
    return response

获取 Cookies

python 复制代码
from flask import request

@app.route('/get_cookie')
def get_cookie():
    username = request.cookies.get('username')
    return 'The username in cookie is: ' + str(username)

Cookies 的局限性

  • 存储在用户浏览器端

,因此容易受到安全攻击,如跨站脚本(XSS)和跨站请求伪造(CSRF)。

  • Cookies 的大小通常限制在 4KB 左右,不适合存储大量数据。

Flask 会话(Session)的使用

会话(Session)在 Flask 中用于存储在服务端的用户数据,而浏览器只保存一个会话ID的 Cookie。

配置 Flask 会话

在 Flask 应用中,需要设置一个密钥来加密会话数据。

python 复制代码
app = Flask(__name__)
app.secret_key = 'your_secret_key'  # 应为难以猜测的密钥

设置会话数据

python 复制代码
from flask import session

@app.route('/login')
def login():
    session['user_id'] = '123456'  # 假设用户ID为123456
    return 'User logged in'

获取会话数据

python 复制代码
@app.route('/profile')
def profile():
    user_id = session.get('user_id')
    if not user_id:
        return 'Not logged in!', 403
    return 'Profile page for user {}'.format(user_id)

会话的有效期

默认情况下,Flask 的会话是浏览器关闭时过期。也可以设置会话的持续时间:

python 复制代码
from datetime import timedelta

app.permanent_session_lifetime = timedelta(days=5)
session.permanent = True  # 使当前会话持久化

会话与 Cookies 的安全性

安全性是管理会话和 Cookies 时必须考虑的重要因素。

安全实践

  • 使用 HTTPS 来防止会话被窃听。
  • 设置 Cookie 的 secure 标志,使其仅通过 HTTPS 发送。
  • 设置 Cookie 的 HttpOnly 标志,阻止 JavaScript 访问 Cookie。
  • 定期更换 secret_key
  • 对敏感数据进行加密处理。

使用 Flask-Session 扩展

对于需要更复杂会话管理的应用,可以使用 Flask-Session 扩展,它支持将会话数据保存在服务器端的多种后端中,例如 Redis、文件系统等。

安装 Flask-Session

bash 复制代码
pip install Flask-Session

配置 Flask-Session

python 复制代码
from flask import Flask
from flask_session import Session

app = Flask(__name__)
# 配置 Flask-Session
app.config['SESSION_TYPE'] = 'filesystem'

Session(app)

总结

在 Flask 应用中,正确地使用会话和 Cookies 对于维护一个安全且高效的用户状态管理机制至关重要。通过本文的介绍,读者应能够理解并有效地在自己的 Flask 应用中实现会话和 Cookies 的管理。

相关推荐
张龙6872 小时前
uv 全面指南:比 pip 快 100 倍的 Python 包管理器,从安装到团队落地
后端·python
@HNUSTer3 小时前
Python数据可视化科技图表绘制系列教程(八)
python·数据可视化·科技论文·专业制图·科研图表
专注仿真3 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
满怀冰雪4 小时前
22-使用 PaddleClas 快速训练图像分类模型
人工智能·python·机器学习·分类·数据挖掘·paddlepaddle
gb42152874 小时前
python中Web应用服务器
开发语言·前端·python
reasonsummer6 小时前
【办公类-109-12】20260901圆形挂牌(模版重制:文本框圆形重叠_word编辑单面_接送卡&被子卡&床卡&入园卡)
python·word
名明鸣冥6 小时前
k8s-agent架构思考(一)
python
DoLovya6 小时前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
AI情绪识别开源7 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
极创信息7 小时前
国产化信创适配认证高频术语:信创适配、软件自主可控、国产化率、代码溯源率、代码自主率、代码开源率是什么?
java·python·struts·eclipse·开源·php·hibernate