一、为什么需要 Session / Cookie / TokenHTTP 协议有一个非常重要的特点无状态也就是说每一次请求都是独立的服务器不会记住你是谁。例如登录 → 下一个请求 → 服务器不知道你是否登录过所以就需要一种机制来记录用户身份状态二、Cookie 详解1. 什么是 CookieCookie 是存储在浏览器端的一小段数据由服务器生成并发送给客户端保存。2. 工作流程客户端请求 → 服务器响应 → Set-Cookie ↓ 浏览器保存 Cookie ↓ 后续请求自动携带 Cookie3. 示例Set-Cookie: usernameadmin之后请求Cookie: usernameadmin4. Cookie 特点存储在客户端自动随请求发送有大小限制一般 4KB可以设置过期时间5. Cookie 问题❌ 不安全容易被窃取❌ 容量小❌ 依赖浏览器三、Session 详解1. 什么是 SessionSession 是存储在服务器端的用户会话数据2. 工作流程1. 用户登录 2. 服务器创建 Session保存用户信息 3. 返回 SessionID 给客户端通过 Cookie 4. 后续请求携带 SessionID 5. 服务器通过 SessionID 查找用户信息3. 关键点 Session ≠ CookieSession数据服务器Cookie载体客户端4. 示例流程Cookie: JSESSIONIDabc123服务器SessionMap: abc123 → 用户信息5. Session 优点✅ 数据安全存在服务器✅ 可存储复杂数据6. Session 缺点❌ 占用服务器内存❌ 分布式系统难以共享❌ 扩展性差四、Token 详解1. 什么是 TokenToken 是一种身份认证凭证字符串常见实现JWTJSON Web Token2. 工作流程1. 用户登录 2. 服务器生成 Token 3. 返回给客户端 4. 客户端存储 Token 5. 每次请求携带 Token 6. 服务器校验 Token3. 请求示例Authorization: Bearer xxxxxxx4. Token 特点无状态服务器不存储可跨域适合分布式系统5. Token 优点✅ 无需服务器存储✅ 支持分布式✅ 扩展性强6. Token 缺点❌ 一旦泄露风险较大❌ 不容易主动失效需额外机制五、三者核心区别1. 对比表特性CookieSessionToken存储位置客户端服务器客户端安全性低高中是否无状态否否是分布式支持差差强容量小大中依赖浏览器是是否2. 一句话总结 Cookie存数据 Session存状态 Token做认证六、三者关系重点理解关系图Cookie ← 存储 SessionID Session ← 存储用户数据 Token ← 替代 Session 的方案经典组合 Session CookieCookie 存 SessionID Session 存用户数据 Token 模式客户端存 Token 服务器只负责校验七、实际开发中的选择1. 单体应用传统 使用Session Cookie2. 前后端分离 使用TokenJWT原因支持跨域前端可控更灵活3. 分布式系统 推荐Token或 Session Redis八、安全问题面试重点1. Cookie 风险XSS跨站脚本攻击CSRF跨站请求伪造2. Token 风险Token 被盗用3. 防护措施HTTPSHttpOnly CookieToken 设置过期时间Refresh Token 机制九、面试高频问题1. Session 和 Cookie 的区别 Session 在服务端Cookie 在客户端 Cookie 存 SessionID2. Token 为什么适合分布式 因为无状态不依赖服务器存储3. JWT 由哪几部分组成Header.Payload.Signature4. 如何实现登录认证常见流程登录 → 生成 Token → 返回 → 请求携带 → 校验十、总结速记版HTTP 无状态 → 需要身份认证机制Cookie客户端存数据Session服务端存数据Token无状态认证现代开发Token 为主
Session、Cookie、Token 详解(原理 + 区别 + 实战)
一、为什么需要 Session / Cookie / TokenHTTP 协议有一个非常重要的特点无状态也就是说每一次请求都是独立的服务器不会记住你是谁。例如登录 → 下一个请求 → 服务器不知道你是否登录过所以就需要一种机制来记录用户身份状态二、Cookie 详解1. 什么是 CookieCookie 是存储在浏览器端的一小段数据由服务器生成并发送给客户端保存。2. 工作流程客户端请求 → 服务器响应 → Set-Cookie ↓ 浏览器保存 Cookie ↓ 后续请求自动携带 Cookie3. 示例Set-Cookie: usernameadmin之后请求Cookie: usernameadmin4. Cookie 特点存储在客户端自动随请求发送有大小限制一般 4KB可以设置过期时间5. Cookie 问题❌ 不安全容易被窃取❌ 容量小❌ 依赖浏览器三、Session 详解1. 什么是 SessionSession 是存储在服务器端的用户会话数据2. 工作流程1. 用户登录 2. 服务器创建 Session保存用户信息 3. 返回 SessionID 给客户端通过 Cookie 4. 后续请求携带 SessionID 5. 服务器通过 SessionID 查找用户信息3. 关键点 Session ≠ CookieSession数据服务器Cookie载体客户端4. 示例流程Cookie: JSESSIONIDabc123服务器SessionMap: abc123 → 用户信息5. Session 优点✅ 数据安全存在服务器✅ 可存储复杂数据6. Session 缺点❌ 占用服务器内存❌ 分布式系统难以共享❌ 扩展性差四、Token 详解1. 什么是 TokenToken 是一种身份认证凭证字符串常见实现JWTJSON Web Token2. 工作流程1. 用户登录 2. 服务器生成 Token 3. 返回给客户端 4. 客户端存储 Token 5. 每次请求携带 Token 6. 服务器校验 Token3. 请求示例Authorization: Bearer xxxxxxx4. Token 特点无状态服务器不存储可跨域适合分布式系统5. Token 优点✅ 无需服务器存储✅ 支持分布式✅ 扩展性强6. Token 缺点❌ 一旦泄露风险较大❌ 不容易主动失效需额外机制五、三者核心区别1. 对比表特性CookieSessionToken存储位置客户端服务器客户端安全性低高中是否无状态否否是分布式支持差差强容量小大中依赖浏览器是是否2. 一句话总结 Cookie存数据 Session存状态 Token做认证六、三者关系重点理解关系图Cookie ← 存储 SessionID Session ← 存储用户数据 Token ← 替代 Session 的方案经典组合 Session CookieCookie 存 SessionID Session 存用户数据 Token 模式客户端存 Token 服务器只负责校验七、实际开发中的选择1. 单体应用传统 使用Session Cookie2. 前后端分离 使用TokenJWT原因支持跨域前端可控更灵活3. 分布式系统 推荐Token或 Session Redis八、安全问题面试重点1. Cookie 风险XSS跨站脚本攻击CSRF跨站请求伪造2. Token 风险Token 被盗用3. 防护措施HTTPSHttpOnly CookieToken 设置过期时间Refresh Token 机制九、面试高频问题1. Session 和 Cookie 的区别 Session 在服务端Cookie 在客户端 Cookie 存 SessionID2. Token 为什么适合分布式 因为无状态不依赖服务器存储3. JWT 由哪几部分组成Header.Payload.Signature4. 如何实现登录认证常见流程登录 → 生成 Token → 返回 → 请求携带 → 校验十、总结速记版HTTP 无状态 → 需要身份认证机制Cookie客户端存数据Session服务端存数据Token无状态认证现代开发Token 为主