杨斌
发布于 2026-04-09 / 3 阅读
0
0

Session和Cookie技术原理

这个问题要搞清楚,本质上是在理解 Web 登录的底层机制

👉 Cookie 是客户端存储机制
👉 Session 是服务端存储机制
👉 两者是“配合使用”的,而不是对立关系


一、先用一句话理解

👉 Cookie:

浏览器帮你“记东西”

👉 Session:

服务器帮你“记身份”


二、Cookie 原理(客户端)

本质就是浏览器保存的一小段数据:

key=value

比如:

sessionId=abc123

第一次请求:

浏览器 → 服务器(没有cookie)

服务器返回:

Set-Cookie: sessionId=abc123

注意:sessionId 是服务器给每个用户会话分配的“唯一身份证号”

之后每次请求:

浏览器自动带上:

Cookie: sessionId=abc123

👉 重点:

Cookie 是浏览器自动带的,不需要你手动写代码


  • 存在浏览器(客户端)

  • 每次请求自动携带

  • 有大小限制(约4KB)

  • 可以设置过期时间


三、Session 原理(服务端)

1️⃣ Session 是什么?

服务器上的一块存储(内存 / Redis):

sessionId → 用户数据

比如:

abc123 → { userId: 1001, username: "yang" }

2️⃣ Session 工作流程

第一次登录:

1. 用户登录
2. 服务端创建 session
3. 生成 sessionId(如 abc123)
4. 返回给浏览器(通过 Cookie)

后续请求:

浏览器带 cookie(sessionId)
↓
服务器根据 sessionId 查 session
↓
找到用户信息 → 放行

四、Cookie + Session 关系(核心)

很多人误解,这里帮你理清:

Cookie:负责“传递 sessionId”
Session:负责“存储用户数据”

👉 完整链路:

浏览器(Cookie: sessionId)
        ↓
服务器(Session存用户信息)

五、为什么需要 Session?

因为:

👉 HTTP 是无状态的!

请求1:登录
请求2:访问接口

服务器默认不知道这两个请求是同一个人。

👉 Session 的作用:

让服务器“记住你是谁”


六、Cookie 和 Session 的区别

对比

Cookie

Session

存储位置

浏览器

服务器

存什么

少量数据

用户信息

安全性

较低

较高

容量

小(4KB)

生命周期

可控

可控


七、为什么说 Cookie 不安全?

因为:

  • 可以被窃取(XSS)

  • 可以被篡改

  • 明文可见(除非加密)

👉 所以:

  • 一般 Cookie 只存 sessionId

  • 不存敏感数据


八、Session 的问题(你做后端必须知道)

❗1. 分布式问题

请求1 → 服务器A(有session)
请求2 → 服务器B(没有session ❌)

👉 解决:

  • Session共享(Redis)


❗2. 内存压力

用户多:

100万用户 → 100万session

❗3. 扩展性差

每次请求都要查:

  • 内存 / Redis


九、这就是为什么出现 JWT

👉 对比一下:

技术

状态在哪

Session

服务端

JWT

客户端

👉 JWT:

不用存 session,直接靠 token 识别用户


十、总结(你可以记住这张图)

【Session方案】

浏览器
  ↓(Cookie: sessionId)
服务器
  ↓
Session(存用户)


【JWT方案】

浏览器
  ↓(token)
服务器
  ↓
解析token(不存状态)

十一、给你一个更深一层理解(关键)

👉 本质区别:

  • Session:

    用“ID + 存储”换身份

  • JWT:

    用“签名 + 自带信息”换身份


评论