深入理解 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 的管理。

相关推荐
老歌老听老掉牙38 分钟前
空间曲线数据的拼接与几何变换分析
python·曲线
databook5 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站5 小时前
十一、评估测试
开发语言·人工智能·python
szial5 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
青少儿编程课堂6 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
怕浪猫6 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
老歌老听老掉牙7 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
打工仔折腾 AI8 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
梦幻精灵_cq8 小时前
sumdir——一个伪python.built-in的“术法”打造
python
weixin_440730509 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python