当前位置:首页>python>Python Web必懂:Cookie和Session到底啥区别?用Flask 5分钟搞懂

Python Web必懂:Cookie和Session到底啥区别?用Flask 5分钟搞懂

  • 2026-09-22 19:31:30
Python Web必懂:Cookie和Session到底啥区别?用Flask 5分钟搞懂

引言

做Python Web开发的同学,大概率都被Cookie和Session绕晕过:
“为啥登录要存这俩东西?”
“它们到底存在哪?”
“用的时候该选哪个?”

其实这俩核心都是为了解决HTTP协议“无状态”的问题,只是分工不同。今天用最通俗的话+实战代码,把这俩概念讲透,新手也能秒懂!

一、先搞懂:Cookie和Session到底是啥?(生活化比喻)

HTTP协议就像你去咖啡店买咖啡,店员不会记住你上次买了什么、有没有充值——每次交易都是“一次性”的,这就是“无状态”。

而Cookie和Session,就是解决“让服务器记住你”的两个工具:

  • • Cookie:相当于你手里的“小票”
    服务器把你的信息(比如登录状态、偏好设置)加密后,发给浏览器,浏览器把它存在本地(电脑/手机里)。下次你再访问服务器,浏览器会自动带上这张“小票”,服务器一看就知道“哦,是你来了”。
    ✨ 核心:存在客户端(浏览器),大小有限制(一般4KB),可以自己设置过期时间。
  • • Session:相当于咖啡店的“会员档案”
    服务器不直接把你的信息发给浏览器,而是给你一个唯一的“档案编号(Session ID)”,这个编号存在Cookie里发给你;你的真实信息(比如用户名、权限)则存在服务器端(内存/数据库/Redis)。下次你带着编号来,服务器查档案就知道你的信息了。
    ✨ 核心:真实数据存在服务器端,客户端只存一个“编号”,更安全。

二、核心区别:一张表讲清楚

对比维度
Cookie
Session
存储位置
客户端(浏览器/本地)
服务器端(内存/数据库/Redis)
存储大小
有限制(约4KB)
无大小限制(受服务器性能影响)
安全性
较低(易被篡改/窃取)
较高(数据不暴露给客户端)
有效期
可设置长期有效(持久Cookie)
默认关闭浏览器就失效(可配置)
服务器压力
无压力(不用存数据)
有压力(需存储/管理数据)

三、Python实战:用Flask演示Cookie和Session的使用

光说不练假把式,用最常用的Flask框架,写两行代码就能看到效果!

前置准备

先安装Flask:

pip install flask
1. 演示Cookie的设置与获取
from flask import Flask, make_response, request

app = Flask(__name__)
# 配置密钥(Session需要,Cookie可选)
app.secret_key = "your_secret_key_123"# 换成自己的随机字符串

# 设置Cookie
@app.route("/set_cookie")
defset_cookie():
# 创建响应对象
    resp = make_response("已为你设置Cookie!")
# 设置Cookie:key=username,value=zhangsan,过期时间3600秒(1小时)
    resp.set_cookie("username", "zhangsan", max_age=3600)
return resp

# 获取Cookie
@app.route("/get_cookie")
defget_cookie():
# 从请求中获取Cookie
    username = request.cookies.get("username")
if username:
returnf"你好!Cookie中的用户名是:{username}"
else:
return"未找到Cookie信息"

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

运行代码后,访问 http://127.0.0.1:5000/set_cookie,再访问 http://127.0.0.1:5000/get_cookie,就能看到Cookie的效果。
👉 你可以打开浏览器的“开发者工具”→“应用”→“Cookie”,直接看到本地存储的Cookie信息。

2. 演示Session的设置与获取
from flask import Flask, session, request

app = Flask(__name__)
# 必须配置密钥,否则Session无法使用
app.secret_key = "your_secret_key_123"

# 设置Session
@app.route("/set_session")
defset_session():
# 把用户信息存入Session(服务器端)
    session["username"] = "zhangsan"
    session["age"] = 25
return"已为你设置Session!"

# 获取Session
@app.route("/get_session")
defget_session():
    username = session.get("username")
    age = session.get("age")
if username and age:
returnf"Session信息:用户名={username},年龄={age}"
else:
return"未找到Session信息"

# 清除Session
@app.route("/clear_session")
defclear_session():
    session.clear()  # 清空当前用户的Session
return"Session已清空"

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

运行后访问 http://127.0.0.1:5000/set_session,再访问 http://127.0.0.1:5000/get_session,就能拿到Session数据。
👉 此时浏览器里只会存一个叫session的Cookie,里面是Session ID,看不到真实的用户信息——这就是Session的安全优势。

四、实际开发中该怎么选?

  1. 1. 选Cookie的场景:
    • • 存储非敏感信息(比如用户的主题偏好、语言设置);
    • • 希望数据长期有效(比如“记住我”功能);
    • • 想减轻服务器压力。
  2. 2. 选Session的场景:
    • • 存储敏感信息(比如登录状态、用户权限、购物车数据);
    • • 数据量较大(超过4KB);
    • • 希望能灵活控制数据的有效期(比如强制登出)。

五、避坑提醒

  1. 1. Cookie一定要加密存储,避免明文传输(比如密码绝不能直接存在Cookie里);
  2. 2. Session的密钥(secret_key)一定要复杂,别用简单的字符串(比如123456);
  3. 3. 生产环境中,Session别存在内存里(重启服务器就丢了),建议用Redis/数据库存储。

总结

  1. 1. Cookie是“存在客户端的小票”,Session是“存在服务器的档案+客户端的编号”,核心都是解决HTTP无状态问题;
  2. 2. Cookie适合存非敏感、小体积数据,Session适合存敏感、大体积数据;
  3. 3. Python Web中(Flask/Django),Session本质依赖Cookie传递ID,安全性远高于纯Cookie存储。

看完这篇,是不是再也不混淆Cookie和Session了?动手跑一遍代码,理解会更深刻~


关键点回顾

  1. 1. 核心定位:Cookie存客户端(4KB限制、安全性低),Session存服务器端(无大小限制、安全性高),Session依赖Cookie传递ID;
  2. 2. 使用场景:非敏感/小数据用Cookie,敏感/大数据用Session;
  3. 3. 实战要点:Flask中使用Session必须配置secret_key,生产环境Session建议用Redis存储。

最新文章

随机文章