Python Flask 中 Cookie 与 Session 的区别及实战应用
HTTP 协议本身是无状态的,Web 框架需要借助存储机制维持用户会话。在 Flask 中,Cookie 将数据直接保存在浏览器端,而 Session 采用“服务端存储数据 + 浏览器保存加密标识”的模式,安全性更高。本文详述两者的核心差异,并提供从零搭建虚拟环境、编写路由读写数据的完整步骤与安全配置指南。
核心原理对比
HTTP 请求默认不保留上下文信息。访问网页时,服务器无法仅凭连接判断“你是谁”。Cookie 是由服务器生成、由浏览器缓存的键值对数据,属于明文存储于客户端,容易被篡改且容量受限。Session 则遵循“前后端分离”思路:敏感数据(如登录状态、权限标识)存放在服务端,浏览器仅持有经过签名或加密的 Session ID 存放在 Cookie 中。双方校验该标识即可恢复会话,兼顾了安全性与扩展性。
环境准备与安装
在开始编写逻辑前,需先隔离项目依赖,确保运行环境干净。
第1步:创建虚拟环境
目的:避免全局包冲突。
入口:系统终端或命令行。
动作:执行以下命令创建并切换至项目目录。
mkdir myproject
cd myproject
python3 -m venv venv
第2步:激活虚拟环境
目的:使后续的包安装指令作用于隔离空间。
入口:同上终端。
动作:Linux/macOS 执行 . venv/bin/activate;Windows 执行 venv\Scripts\activate。激活成功后命令行会显示 (venv) 前缀。
第3步:安装 Flask 框架
目的:获取路由管理与模板渲染核心库。
入口:终端命令行。
动作:执行 pip install Flask 完成安装。
Cookie 的读写操作与验证
Cookie 适用于非敏感的基础状态记录,如主题偏好或临时身份标识。下面演示如何通过响应对象写入 Cookie,并在请求阶段读取验证。
from flask import Flask, Response, request
app = Flask(__name__)
@app.route("/set_cookie")
def set_cookie():
response = Response("set cookie success")
response.set_cookie("user_id", "123")
return response
@app.route("/get_cookie")
def get_cookie():
cookies = request.cookies
if cookies.get("user_id") == "123":
return "尊敬的用户你好,你的cookies是" + str(cookies)
else:
return "你不是VIP,请先获取身份"
if __name__ == "__main__":
app.run(debug=True, port=5000)
运行上述脚本后,首先访问 /get_cookie 路径,因浏览器尚未携带对应数据,将返回未获取身份的提示。随后访问 /set_cookie 路径,服务端会将指定键值写入响应头。之后再次刷新或访问 /get_cookie,浏览器自动携带该 Cookie,即可成功读取并显示已登录状态。
Session 的配置与使用流程
Session 更适合保存登录凭证、购物车或高频交互状态。使用前提是配置密钥,用于对传输的 Session ID 进行签名防篡改。
from flask import Flask, session
app = Flask(__name__)
# 必须配置长随机字符串作为密钥,防止会话伪造
app.config["SECRET_KEY"] = "your-random-secret-key-here"
@app.route("/set_session")
def set_session():
session["user_name"] = "zhuxiaoxiao"
return "设置session成功" + session["user_name"]
@app.route("/home")
def home():
if session.get("user_name") == "zhuxiaoxiao":
return "尊敬的用户,登录成功"
else:
return "请先登录好吗?"
if __name__ == "__main__":
app.run(debug=True, port=5000)
操作逻辑与 Cookie 类似,但底层介质不同。首次访问 /home 时,由于没有有效的签名标识,请求会被拒绝。访问 /set_session 后,服务端会将用户名写入内部存储,并向客户端返回加密后的标识 Cookie。后续请求只要带上此标识,即可通过 /home 的状态检查。务必将示例中的占位密钥替换为高强度随机字符串,否则会导致安全警告或会话失效。
常见配置排错与注意事项
- 缺失密钥报错:启动 Session 相关路由时若抛出
RuntimeError: The session is unavailable because no secret key was set,请检查是否在app.config中正确赋值了SECRET_KEY。 - 跨域与路径限制:
set_cookie支持path参数限定有效路径。若发现 Cookie 无法在特定子路由下读取,请确认是否未设置path="/"导致作用域被截断。 - 调试模式警告:代码末尾的
debug=True仅限本地开发使用。部署至生产环境前务必关闭,并启用 HTTPS 以防止标识在网络传输中被拦截。
以上就是 Python Flask 中 Cookie 与 Session 区别及实战应用的详细内容,更多关于 Python Web 开发基础配置的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













