cookie、session、token详解

张开发
2026/5/12 8:17:58 15 分钟阅读

分享文章

cookie、session、token详解
一、先想一个最本质的问题服务器是怎么认出 “你是你” 的我们打开浏览器输入账号密码登录。服务器去数据库查一遍确认嗯是本人。可问题来了之后的每一次请求难道还要再发一遍账号密码吗当然不行。每次都带密码极其不安全客户端要存密码泄露风险极大体验差性能差所以正确的思路是登录成功后服务器给客户端一个身份标记。以后请求只带这个标记服务器就知道你是谁。这个 “标记”就是 Cookie、Session、Token 要解决的事情。二、第一步浏览器自动存的标记 —— Cookie1. 什么是 Cookie专业版Cookie 是HTTP 协议规范下服务器通过Set-Cookie响应头下发由客户端浏览器自动存储、自动携带的小型文本数据用于客户端与服务端之间的状态传递。2. 通俗流程你输入账号密码登录服务器验证通过服务器生成一段身份标识放到响应头里返回浏览器自动保存这段标识以后每次请求浏览器自动把 Cookie 带给服务器整个过程代码不用管浏览器全自动。3. Cookie 的问题数据存在客户端可被查看、修改、冒用大小有限4KB不能存太多内容纯文本不安全三、第二步把数据存在服务器 —— Session为了解决 Cookie 不安全、不能存大量信息的问题我们引入Session。1. 什么是 Session专业版Session 是服务端会话机制服务端为每个客户端创建独立的会话数据存储空间生成唯一的SessionID并通过 Cookie 将SessionID下发给客户端。客户端后续请求携带SessionID服务端根据这个 ID 索引对应的会话数据。2. 通俗流程登录成功服务器把你的用户信息存在自己这里内存 / 数据库生成一个很长、随机、无法猜到的字符串叫SessionID把SessionID放进 Cookie 发给浏览器以后请求浏览器自动带SessionID服务器通过SessionID找到你的会话信息一句话Cookie 只带一把钥匙真正的房间在服务器里。3. Session 的优点敏感数据存在服务端更安全客户端只存一个 ID体积小适合传统 Web 网站、后端管理系统4. Session 的缺点强依赖 CookieAPP、小程序不友好服务器集群时需要做 Session 共享有状态不利于分布式扩展四、第三步不依赖 Cookie 的全平台方案 —— Token现在的客户端不只有浏览器APP、小程序、桌面软件、跨域前端……它们没有 Cookie 自动机制。于是Token登场了。1. 什么是 Token专业版Token 是服务端签发的加密签名凭证通常包含用户身份信息与防篡改签名。它无状态、不依赖 Cookie由客户端自行存储请求时手动携带服务端只需要验签就能完成身份认证不需要查表。2. 通俗流程账号密码登录服务器验证通过用密钥生成一段加密字符串——Token如 JWT直接返回给客户端客户端自己手动保存本地存储、文件等以后请求手动把 Token 放到请求头服务器验证签名解析身份不需要存会话3. Token 的核心优势不依赖 Cookie全平台通用无状态服务端不用存会话天然支持分布式加密签名防篡改、防伪造适合前后端分离、APP、小程序、微服务五、一张图看懂三者关系plaintext浏览器登录 → 账号密码验证通过 ↓ 服务器要给你一个“身份标记” ↓ 1. 浏览器自动存、自动发 → Cookie 2. 数据放服务器只给钥匙 → Session钥匙SessionID存在Cookie 3. 全平台、手动存、加密凭证 → Token六、极简总结面试直接背 Cookie浏览器自动存储、自动发送HTTP 协议原生支持存客户端不安全、容量小 Session服务端存储会话信息客户端只存SessionID放在 Cookie 里安全但依赖 Cookie有状态 Token加密签名凭证自包含身份信息不依赖 Cookie全平台可用无状态易扩展适合现代架构七、一句话串起整个逻辑浏览器登录账号密码验证后服务器不再让你每次带密码而是返回一个标记浏览器自动保存并发送这就是Cookie为了安全把数据存在服务端只给你一个钥匙SessionID这就是SessionAPP、小程序没有 Cookie 机制于是客户端手动保存加密凭证这就是Token。

更多文章