Cookie、Session、Token 详细讲解
Cookie、Session、Token这三个是Web 身份认证、会话管理的核心技术核心围绕「用户登录后怎么证明你是你」展开。先给一个最通俗的比喻Cookie酒店给你的房卡贴纸你自己揣着每次进房间出示Session酒店前台的登记本你只带一个编号前台查本子确认你身份Token酒店给你的盖章通行证自己拿着保安看章就放行不用查本子一、分别详解定义 原理 特点1. Cookie本质服务器通过响应头Set-Cookie发给浏览器的小型文本数据纯客户端存储。核心原理服务器生成 Cookie → 响应头返回给浏览器浏览器自动保存 Cookie本地文件 / 缓存后续请求同一域名时浏览器自动携带Cookie 到服务器服务器解析 Cookie识别用户关键特点存储位置客户端浏览器大小限制单 Cookie≈4KB单个域名最多 20 个左右生命周期会话 Cookie关闭浏览器即失效持久 Cookie服务器设置max-age/expires到期失效传输方式自动携带无需前端手动处理安全性明文存储可加密易被 XSS/CSRF 攻击状态无状态服务器不保存任何 Cookie 相关数据常用场景记住用户名、购物车、主题偏好、广告追踪等轻量、非敏感数据。2. Session本质服务器端的会话数据基于 Cookie 实现核心依赖SessionID服务端存储。核心原理用户登录成功服务器创建Session存储用户信息用户 ID、权限等生成唯一SessionID通过 Cookie 返回给浏览器后续请求浏览器自动带SessionID的 Cookie服务器通过SessionID查询本地 Session 数据确认用户身份关键特点存储位置服务器端内存、Redis、数据库大小限制无严格限制取决于服务器资源生命周期会话超时 / 关闭浏览器 / 主动登出失效传输方式依赖 Cookie 传递SessionID安全性数据在服务器仅 ID 在客户端比 Cookie 安全状态有状态服务器需要维护所有用户的 Session缺陷分布式 / 集群环境下Session 共享麻烦需 Redis 同步常用场景传统单体 Web 应用的用户登录会话管理。3. Token以 JWT 为例最常用本质加密签名的身份凭证无状态认证服务器不存储会话数据。常见JWTJSON Web Token、OAuth2 Token。核心原理用户登录成功服务器用密钥加密生成 Token包含用户信息 过期时间 签名Token 返回给前端前端存在LocalStorage/SessionStorage/Cookie后续请求前端手动把 Token 放到请求头Authorization: Bearer xxx服务器验签解密 Token无需查询数据库 / 缓存直接识别用户关键特点存储位置客户端LocalStorage、Cookie、移动端本地大小限制大于 Cookie取决于载荷内容生命周期服务器签发时固定过期时间无法主动作废除非加黑名单传输方式手动携带不自动随请求发送安全性加密签名防篡改CSRF 风险极低XSS 仍需防护状态无状态服务器不存任何会话天然支持分布式优势跨域友好、支持移动端 / 小程序 / 微服务常用场景前后端分离、App / 小程序、分布式微服务、跨域认证。二、核心区别对比表表格维度CookieSessionTokenJWT存储位置客户端浏览器服务器端客户端是否依赖 Cookie本身就是 Cookie依赖 Cookie 传递 SessionID不依赖可存 Cookie / 本地存储服务端状态无状态有状态需维护会话无状态分布式 / 集群支持支持麻烦需 Session 共享天然支持跨域支持受同源策略限制受同源策略限制极佳请求头携带跨域无压力传输方式浏览器自动携带自动携带 SessionID前端手动放入请求头安全性低明文易劫持中数据在服务端高加密签名防篡改性能开销小中服务端存储 查询小仅验签无查询数据大小小≈4KB大中等三、关键核心差异总结1. 存储位置决定「谁管数据」Cookie客户端管服务器不管Session服务器管客户端只存 IDToken客户端管服务器只负责验签2. 状态性决定「分布式适配」Session 是有状态服务器必须记住每个用户的会话集群下要同步 Session成本高Cookie/Token 是无状态服务器不记会话随便扩容适配微服务3. 传输方式决定「跨域 CSRF」Cookie 自动携带同源限制严易被 CSRF 攻击Token 手动携带跨域自由CSRF 风险几乎为 04. 安全性排序TokenJWT Session Cookie四、演进关系为什么会从 Cookie→Session→Token早期只用 Cookie直接存用户信息但明文不安全、大小受限改用 Session把敏感数据放服务端只留 ID 在 Cookie解决安全问题出现 Token解决 Session 在分布式、跨域、移动端的痛点无状态更灵活五、适用场景选择用 Cookie存非敏感轻量数据记住账号、购物车、主题用 Session传统单体网站、内网系统无需跨域 / 分布式用 Token前后端分离、App / 小程序、微服务、第三方登录OAuth2六、补充常见误区Session 必须用 Cookie不是也可以通过 URL 拼接 SessionID但极少用不安全。Token 就是 JWT不是Token 是统称JWT 是最常用的实现方式。Token 绝对安全防篡改但怕 XSS 窃取所以建议配合HttpOnly、Secure、SameSite使用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2494846.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!