cookie、session、token详解

一、先想一个最本质的问题:

服务器是怎么认出 "你是你" 的?

我们打开浏览器,输入账号密码登录。服务器去数据库查一遍,确认:嗯,是本人

可问题来了:之后的每一次请求,难道还要再发一遍账号密码吗?

当然不行。

  • 每次都带密码,极其不安全
  • 客户端要存密码,泄露风险极大
  • 体验差,性能差

所以,正确的思路是:

登录成功后,服务器给客户端一个身份标记。以后请求只带这个标记,服务器就知道你是谁。

这个 "标记",就是 Cookie、Session、Token 要解决的事情。


1. 什么是 Cookie(专业版)

Cookie 是 HTTP 协议规范 下,服务器通过 Set-Cookie 响应头下发,由 客户端(浏览器)自动存储、自动携带 的小型文本数据,用于客户端与服务端之间的状态传递。

2. 通俗流程

  1. 你输入账号密码登录
  2. 服务器验证通过
  3. 服务器生成一段身份标识,放到响应头里返回
  4. 浏览器自动保存这段标识
  5. 以后每次请求,浏览器自动把 Cookie 带给服务器

整个过程:代码不用管,浏览器全自动。

  • 数据存在客户端,可被查看、修改、冒用
  • 大小有限(4KB),不能存太多内容
  • 纯文本,不安全

三、第二步:把数据存在服务器 ------ Session

为了解决 Cookie 不安全、不能存大量信息的问题,我们引入 Session

1. 什么是 Session(专业版)

Session 是 服务端会话机制 :服务端为每个客户端创建独立的会话数据存储空间,生成唯一的 SessionID,并通过 Cookie 将 SessionID 下发给客户端。客户端后续请求携带 SessionID,服务端根据这个 ID 索引对应的会话数据。

2. 通俗流程

  1. 登录成功
  2. 服务器把你的用户信息存在自己这里(内存 / 数据库)
  3. 生成一个很长、随机、无法猜到 的字符串,叫 SessionID
  4. SessionID 放进 Cookie 发给浏览器
  5. 以后请求,浏览器自动带 SessionID
  6. 服务器通过 SessionID 找到你的会话信息

一句话:Cookie 只带一把钥匙,真正的房间在服务器里。

3. Session 的优点

  • 敏感数据存在服务端,更安全
  • 客户端只存一个 ID,体积小
  • 适合传统 Web 网站、后端管理系统

4. Session 的缺点

  • 强依赖 Cookie,APP、小程序不友好
  • 服务器集群时,需要做 Session 共享
  • 有状态,不利于分布式扩展

现在的客户端不只有浏览器:APP、小程序、桌面软件、跨域前端......它们没有 Cookie 自动机制

于是,Token 登场了。

1. 什么是 Token(专业版)

Token 是 服务端签发的加密签名凭证 ,通常包含用户身份信息与防篡改签名。它 无状态、不依赖 Cookie,由客户端自行存储,请求时手动携带,服务端只需要验签就能完成身份认证,不需要查表。

2. 通俗流程

  1. 账号密码登录
  2. 服务器验证通过
  3. 用密钥生成一段加密字符串 ------ Token(如 JWT)
  4. 直接返回给客户端
  5. 客户端自己手动保存(本地存储、文件等)
  6. 以后请求,手动把 Token 放到请求头
  7. 服务器验证签名,解析身份,不需要存会话

3. Token 的核心优势

  • 不依赖 Cookie,全平台通用
  • 无状态,服务端不用存会话,天然支持分布式
  • 加密签名,防篡改、防伪造
  • 适合前后端分离、APP、小程序、微服务

五、一张图看懂三者关系

plaintext

复制代码
浏览器登录 → 账号密码验证通过
       ↓
服务器要给你一个"身份标记"
       ↓
1. 浏览器自动存、自动发 → Cookie
2. 数据放服务器,只给钥匙 → Session(钥匙=SessionID,存在Cookie)
3. 全平台、手动存、加密凭证 → Token

六、极简总结(面试直接背)

  • 浏览器自动存储、自动发送
  • HTTP 协议原生支持
  • 存客户端,不安全、容量小

🔐 Session

  • 服务端存储会话信息
  • 客户端只存 SessionID(放在 Cookie 里)
  • 安全,但依赖 Cookie,有状态

🔑 Token

  • 加密签名凭证,自包含身份信息
  • 不依赖 Cookie,全平台可用
  • 无状态,易扩展,适合现代架构

七、一句话串起整个逻辑

浏览器登录,账号密码验证后,服务器不再让你每次带密码,而是返回一个标记:浏览器自动保存并发送,这就是 Cookie ;为了安全,把数据存在服务端,只给你一个钥匙(SessionID),这就是 Session ;APP、小程序没有 Cookie 机制,于是客户端手动保存加密凭证,这就是 Token

相关推荐
阿里嘎多学长13 小时前
2026-07-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管
今夕资源网20 小时前
AI声音克隆软件 CosyVoice今夕一键整合包解压即用 阿里巴巴通义实验室开源 github斩获22K星标
人工智能·github·多国语言·声音克隆·零样本语音克隆·感情·ai语音克隆
胡萝卜术1 天前
从聊天模型到本地执行助手:Remote MCP 多工具 Agent 实战
面试·架构·github
慕容引刀1 天前
告别Commit信息纠结:使用Git AI Commit插件实现规范化提交
人工智能·git·github·visual studio code·visual studio
GoGeekBaird1 天前
我开源了 BeeWeave,给 AI Agent 搭一个越用越懂你的知识创作台
后端·github
fthux1 天前
GitZip Pro 源码解析:一个 GitHub 文件/文件夹下载扩展是如何工作的(一)整体架构与扩展入口
人工智能·ai·开源·github·open source
第一程序员1 天前
Rust Agent 子进程执行:Command 之前,先定义输入和超时
python·rust·github
2501_936960362 天前
GitHub初步了解
github
wangruofeng2 天前
11 万 Star 的生成式 AI 入门课,Microsoft 做对了什么
github·aigc·ai编程
IOT那些事儿2 天前
GitHub Profile 429: Too Many Requests
github·profile·429