这是前端/后端面试里非常高频、也非常容易混淆的一组概念。
很多人会把它们混着说,其实它们不是同一层的东西。

最核心的一句话是:

Cookie 是存储/传输方式,Session 是服务端会话机制,Token 是认证凭证,JWT 是 Token 的一种具体实现格式。

如果你先把这句话说出来,面试官会觉得你思路很清晰。


一、先用一张“关系图”讲清

用户登录
   |
   v
服务端认证用户身份
   |
   +-----------------------------+
   |                             |
   | 方案一:Session 方案         | 方案二:Token 方案
   |                             |
   v                             v
服务端创建 Session               服务端签发 Token
并保存用户会话数据               (JWT 是 Token 的一种)
   |                             |
   v                             v
把 SessionID 发给浏览器          把 Token 发给浏览器
   |                             |
   v                             v
浏览器通常用 Cookie 存 SessionID  浏览器可用 Cookie / 内存 / Storage 存 Token
   |                             |
   v                             v
后续请求携带 SessionID           后续请求携带 Token
   |                             |
   v                             v
服务端查 Session                 服务端校验 Token
   |                             |
   v                             v
确认用户身份                     确认用户身份

二、四者分别是什么


1. Cookie 是什么

Cookie 是浏览器提供的一种客户端存储机制,同时它还有一个重要特点:

浏览器会在后续同源请求中自动携带 Cookie。

所以 Cookie 的本质是:

  • 一种浏览器存储方式
  • 一种请求自动携带机制

它不是认证方案本身

Cookie 只是一个“容器”,里面可以放:

  • SessionID
  • Token
  • 其他业务字段

常见特点

  • 存储在浏览器
  • 容量小,一般约 4KB
  • 可以设置过期时间
  • 可以设置:
    • HttpOnly
    • Secure
    • SameSite

2. Session 是什么

Session 是一种服务端会话机制

意思是:

用户登录后,服务端创建一份会话数据保存在服务端,然后给客户端一个会话标识 SessionID
客户端后续请求带着 SessionID,服务端根据它找到对应的会话数据。

Session 的关键点

  • 用户信息主要存在服务端
  • 浏览器通常只保存一个 SessionID
  • 这个 SessionID 常常放在 Cookie 里

所以 Session 模式通常是:

服务端存用户登录状态
客户端存 SessionID

3. Token 是什么

Token 是一种身份认证凭证

你可以把它理解为:

服务端签发给客户端的一张“通行证”,客户端后续请求时带上它,服务端校验它来识别用户身份。

Token 的关键点

  • 它是“认证信息”
  • 常用于前后端分离、移动端、微服务
  • 一般由客户端主动放在请求头里,例如:
Authorization: Bearer xxxxx

注意

Token 不是某一种固定格式,它只是一个统称。

比如:

  • 随机字符串可以是 Token
  • JWT 也可以是 Token

4. JWT 是什么

JWT 全称是:

JSON Web Token

它是 Token 的一种具体格式标准。

也就是说:

JWT 属于 Token,但 Token 不一定是 JWT。

JWT 的特点

JWT 通常由三部分组成:

Header.Payload.Signature

例如:

xxxxx.yyyyy.zzzzz

三部分含义

  • Header:头部,说明算法、类型
  • Payload:载荷,保存用户信息、过期时间等
  • Signature:签名,防止内容被篡改

JWT 最大特点

  • 自包含
  • 服务端不一定需要保存会话数据
  • 只要校验签名即可

所以 JWT 常用于:

  • 无状态认证
  • 前后端分离
  • 分布式系统

三、它们之间到底是什么关系

这是最关键的部分。


1. Cookie 和 Session 的关系

很多传统 Web 登录机制是这样工作的:

登录成功
-> 服务端创建 Session
-> 服务端生成 SessionID
-> 把 SessionID 放到 Cookie 返回给浏览器
-> 浏览器以后自动带上 Cookie
-> 服务端根据 SessionID 找到 Session

所以你可以说:

Session 是服务端的会话数据,Cookie 是客户端保存 SessionID 的载体。


2. Cookie 和 Token 的关系

Token 本身不是存储方式,它需要找个地方存起来。
Cookie 可以作为 Token 的存储位置之一。

比如:

  • 服务端把 Token 写进 Cookie
  • 浏览器自动带上

但也可以不用 Cookie,改成:

  • 放内存
  • 放 sessionStorage
  • 放 localStorage
  • 然后手动加到 Authorization 请求头

所以:

Cookie 可以存 Token,但 Cookie 不等于 Token。


3. Token 和 JWT 的关系

这个最好理解:

JWT 是 Token 的一种具体实现格式。

就像:

  • “水果”是大类
  • “苹果”是其中一种

那么:

  • Token 是大类
  • JWT 是其中一种

4. Session 和 Token 的关系

它们都是“认证方案”,但思路不同。

Session 方案

  • 状态保存在服务端
  • 客户端只存 SessionID

Token 方案

  • 身份信息或认证信息保存在 Token 中
  • 客户端持有 Token
  • 服务端通过校验 Token 识别身份

所以:

Session 和 Token 是两种不同的认证思路。


四、再用一张对比图讲清

Cookie   -> 浏览器存储机制 / 自动携带机制
Session  -> 服务端会话机制
Token    -> 身份认证凭证
JWT      -> Token 的一种标准格式

再换一种更容易背的表达:

Cookie:装东西的“盒子”
Session:服务端保存的“会话档案”
Token:发给客户端的“通行证”
JWT:长得有固定格式的一种“通行证”

这个类比很适合面试说。


五、两套主流认证流程,一次讲清


方案一:Session + Cookie

这是传统 Web 最经典的认证方式。

流程图

1. 用户登录,提交用户名密码
2. 服务端验证成功
3. 服务端创建 Session,并保存用户信息
4. 服务端把 SessionID 写入 Cookie 返回给浏览器
5. 浏览器后续请求自动携带 Cookie
6. 服务端根据 SessionID 找到 Session
7. 识别用户身份,返回数据

特点

  • 服务端保存登录状态
  • 浏览器自动携带 Cookie
  • 适合传统服务端渲染应用

优点

  • 可控性强
  • 服务端可随时销毁 Session
  • 安全管理相对集中

缺点

  • 服务端有状态
  • 分布式系统下要考虑 Session 共享
  • 扩展性不如纯 Token 方案灵活

方案二:Token / JWT 方案

前后端分离里很常见。

流程图

1. 用户登录,提交用户名密码
2. 服务端验证成功
3. 服务端签发 Token(常见是 JWT)
4. 客户端保存 Token
5. 客户端后续请求在请求头里携带 Token
6. 服务端校验 Token
7. 识别用户身份,返回数据

常见请求头

Authorization: Bearer <token>

特点

  • 服务端可以更“无状态”
  • 不依赖传统 Session
  • 更适合前后端分离、移动端、微服务

优点

  • 跨服务更方便
  • 分布式扩展性更好
  • 客户端控制更灵活

缺点

  • 一旦泄露,风险较大
  • 主动注销、踢下线、续签设计更复杂
  • JWT 过大时会增加传输成本

六、面试中最容易混淆的点


1. Cookie 不是 Session

很多人会误以为 Cookie 就是 Session。
其实不是。

正确说法是:

Session 在服务端,Cookie 在客户端。
Cookie 通常只是用来保存 SessionID。


2. Token 不等于 JWT

正确说法:

Token 是认证凭证的统称,JWT 是 Token 的一种格式。


3. JWT 不一定放在 localStorage

JWT 只是一个字符串格式,它可以存放在:

  • 内存
  • Cookie
  • sessionStorage
  • localStorage

所以不要把“JWT”和“localStorage”绑死。


4. Cookie 不只是用来存 Session

Cookie 也可以存:

  • Token
  • 偏好设置
  • 追踪标识

但现代开发里,Cookie 更多用于和服务端交互相关的状态。


七、怎么从“安全角度”把它们串起来

这部分很加分。


Session + Cookie 方案的风险点

  • 主要关注 CSRF
  • 因为 Cookie 会自动携带

防护措施

  • SameSite
  • CSRF Token
  • Secure
  • HttpOnly

Token / JWT 方案的风险点

  • 如果 Token 存在 JS 可读位置,主要关注 XSS
  • 因为恶意脚本可能直接读取 token

防护措施

  • 不把敏感长期凭证暴露给 JS
  • HttpOnly Cookie
  • 短效 access token
  • refresh token 机制
  • CSP
  • 输入过滤

八、一句话理解“有状态”和“无状态”

面试很喜欢问。


Session:偏有状态

因为服务端要保存用户会话数据。

JWT:偏无状态

因为认证信息放在 token 里,服务端主要做校验,不一定保存会话。

但你也可以补一句更严谨的话:

JWT 常被称为无状态认证,但在真实项目中,为了支持注销、黑名单、续签等能力,服务端往往还是会保留部分状态,所以“无状态”并不是绝对的。

这句很高级。


九、面试高分回答模板

你可以直接这样答:

这几个概念其实不在同一层。
Cookie 是浏览器的存储和自动携带机制;
Session 是服务端保存用户会话的一种认证方案;
Token 是身份认证凭证;
JWT 则是 Token 的一种标准格式。

如果是传统登录方式,通常是用户登录成功后,服务端创建 Session,把 SessionID 放到 Cookie 里返回给浏览器,浏览器后续请求自动带上 Cookie,服务端再根据 SessionID 找到对应的 Session。
这时 Cookie 是载体,Session 是服务端会话。

如果是前后端分离场景,更常见的是 Token 方案。用户登录成功后,服务端签发 Token,客户端后续请求通过 Authorization 头携带它,服务端通过校验 Token 来识别用户身份。
而 JWT 只是 Token 的一种具体实现,它把用户信息、过期时间等内容编码进 token 里,并通过签名防止篡改。

所以它们的关系可以总结成一句话:
Cookie 是容器,Session 是服务端状态,Token 是凭证,JWT 是 Token 的一种格式。


十、2 分钟背诵版

JWT、Session、Cookie、Token 这几个概念经常一起出现,但它们其实不是同一个层面的东西。
我的理解是:Cookie 是浏览器端的存储和自动携带机制,Session 是服务端会话机制,Token 是身份认证凭证,而 JWT 是 Token 的一种标准格式。

传统 Web 登录一般是 Session + Cookie 模式。用户登录成功后,服务端会创建一份 Session,保存用户登录状态,然后把一个 SessionID 返回给浏览器,浏览器通常会把它存到 Cookie 里。后续请求时浏览器自动带上 Cookie,服务端根据 SessionID 找到对应的 Session,从而识别用户身份。
所以在这个模式里,Session 是服务端保存的数据,Cookie 只是客户端保存 SessionID 的载体。

而在前后端分离场景里,更常见的是 Token 认证。用户登录成功后,服务端签发一个 Token,客户端后续请求通过 Authorization 请求头携带这个 Token,服务端校验后确认身份。这里的 Token 是一个统称,不一定是 JWT,也可以是普通随机字符串。
JWT 则是 Token 的一种具体格式,通常由 Header、Payload、Signature 三部分组成,特点是自包含、可校验,常用于无状态认证。

所以总结来说:
Cookie 解决的是“客户端怎么存、怎么带”的问题;
Session 和 Token 解决的是“服务端怎么识别用户”的问题;
JWT 解决的是“Token 长什么样”的问题。
这四者经常组合使用,但不能混为一谈。


十一、30 秒精简版

Cookie 是浏览器存储和自动携带机制,Session 是服务端会话,Token 是身份凭证,JWT 是 Token 的一种格式。
传统登录一般是 Session + Cookie:服务端存会话,客户端 Cookie 存 SessionID。
前后端分离一般是 Token/JWT:服务端签发 Token,客户端后续请求携带它。
所以一句话总结就是:Cookie 是容器,Session 是服务端状态,Token 是凭证,JWT 是 Token 的一种实现。


十二、最后送你一个“万能类比”

你在面试里可以这样类比:

  • Cookie:像钱包,负责装东西
  • Session:像酒店前台保存的入住档案
  • Token:像门禁卡,证明你有权限
  • JWT:像一种标准格式的电子门禁卡,上面写了身份信息和签名

这个类比很容易让面试官觉得你表达能力强。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐