5. Cookie Session Token 怎么区分
Cookie、Session、Token 是登录鉴权和接口测试中非常常见的概念。很多测试同学能说“Cookie 存客户端,Session 存服务端,Token 是令牌”,但面试时如果只背这三句话,还是不够。测试岗位更需要理解它们在登录、权限、抓包、接口自动化、App 测试、登录失效、越权测试中的实际作用。
登录态问题是项目里高频 Bug:明明登录了却提示未登录,接口返回 401,切换账号后数据串了,退出登录后接口仍能访问,Token 过期处理不合理,Cookie 没有设置 Secure 或 HttpOnly。要定位这些问题,必须理解 Cookie、Session、Token 的区别和配合方式。
一、Cookie 是什么
Cookie 是浏览器保存在客户端的一小段数据,由服务端通过响应头 Set-Cookie 下发,之后浏览器会在请求中自动带上 Cookie。
例如响应头:
Set-Cookie: JSESSIONID=abc123; Path=/; HttpOnly
后续请求头:
Cookie: JSESSIONID=abc123
Cookie 常用于保存会话标识、用户偏好、追踪信息等。
测试要关注:
- 登录后是否下发 Cookie;
- 后续请求是否自动携带 Cookie;
- Cookie 是否过期;
- 退出登录后 Cookie 是否清除;
- Cookie 是否设置 HttpOnly、Secure、SameSite;
- 是否存在敏感信息明文写入 Cookie。
二、Session 是什么
Session 通常保存在服务端,用于记录用户登录状态。浏览器端一般只保存一个 Session ID,比如 JSESSIONID。服务端根据这个 ID 找到对应的用户会话。
简单理解:
- Cookie 保存 Session ID;
- Session 数据存在服务端;
- 请求带上 Cookie 后,服务端通过 Session ID 找到用户信息。
测试场景:
- 登录成功后服务端创建 Session;
- 未登录访问接口返回 401 或跳转登录页;
- Session 过期后需要重新登录;
- 退出登录后 Session 应失效;
- 多端登录是否互踢取决于业务设计。
三、Token 是什么
Token 是一种令牌,通常由服务端登录成功后返回,客户端保存后在后续请求中携带。
常见携带方式:
Authorization: Bearer xxxxxx
Token 常用于前后端分离、App、小程序、开放接口等场景。
Token 可以是普通随机字符串,也可以是 JWT。测试岗位不一定要深入 JWT 原理,但要知道 Token 代表登录凭证,丢失、过期、伪造、泄露都会影响安全。
测试要关注:
- 登录成功是否返回 Token;
- 后续接口是否必须携带 Token;
- Token 缺失是否返回 401;
- Token 过期是否提示合理;
- 退出登录后 Token 是否失效;
- 是否可以使用旧 Token 访问;
- Token 是否出现在 URL 中;
- Token 是否通过 HTTPS 传输。
四、Cookie 和 Session 的关系
Cookie 和 Session 经常配合使用。典型流程:
- 用户登录;
- 服务端验证用户名密码;
- 服务端创建 Session;
- 服务端通过
Set-Cookie返回 Session ID; - 浏览器后续请求自动带 Cookie;
- 服务端根据 Session ID 找到用户登录状态。
所以 Cookie 在客户端,Session 在服务端,Cookie 里通常存的是 Session ID。
如果 Cookie 丢了,服务端就找不到 Session,用户可能变成未登录。
五、Token 和 Session 的区别
1. 保存位置不同
Session 信息在服务端,客户端只保存 Session ID。
Token 通常由客户端保存,服务端通过校验 Token 识别用户。
2. 适用场景不同
Session 常见于传统 Web。
Token 更常见于前后端分离、App、小程序、开放 API。
3. 扩展性不同
Session 依赖服务端存储,分布式系统需要 Session 共享或集中存储。
Token 更适合无状态服务,但也要考虑失效、续期和安全。
4. 退出登录处理不同
Session 可以服务端直接删除。
Token 如果是无状态 JWT,服务端不保存状态,失效处理要靠过期时间、黑名单或刷新机制。
六、接口测试中怎么处理 Cookie 和 Token
1. Cookie 登录态
浏览器会自动携带 Cookie,但 Postman 或自动化脚本需要管理 Cookie。
测试时可以查看响应头 Set-Cookie,确认登录后是否下发。
2. Token 登录态
登录接口返回 Token 后,后续接口要在 Header 中带上:
Authorization: Bearer {{token}}
Postman 可以在 Tests 中提取 Token;自动化脚本可以把 Token 保存到变量。
3. 自动化测试
自动化中常见流程:
- 调登录接口;
- 提取 Token 或 Cookie;
- 后续接口自动带登录态;
- 校验未登录、过期、无权限场景。
七、常见登录态问题怎么定位
1. 接口返回 401
排查:
- 是否未登录;
- Token 是否缺失;
- Token 是否过期;
- Cookie 是否没带;
- Header 名称是否写错;
- Bearer 格式是否正确;
- 是否跨域导致 Cookie 未携带。
2. 登录后页面仍提示未登录
排查:
- 登录接口是否成功;
- 是否返回 Set-Cookie 或 Token;
- 浏览器是否保存 Cookie;
- 后续接口是否带登录态;
- 前端是否存储 Token 失败;
- 域名、Path、SameSite 配置是否正确。
3. 退出登录后仍能访问接口
排查:
- Session 是否删除;
- Token 是否加入失效机制;
- 前端是否清除本地 Token;
- 后端是否校验 Token 状态;
- 是否存在缓存。
4. 切换账号后数据串号
排查:
- Cookie 或 Token 是否未更新;
- 前端缓存是否未清;
- 服务端 Session 是否复用异常;
- 接口是否根据用户 ID 做权限校验。
八、安全测试关注点
Cookie、Session、Token 相关安全点包括:
- Token 是否放在 URL 中;
- Cookie 是否包含敏感信息;
- Cookie 是否设置 HttpOnly;
- HTTPS 下 Cookie 是否设置 Secure;
- Token 过期时间是否合理;
- 退出登录后 Token 是否失效;
- 是否存在越权访问;
- 是否可以伪造用户 ID;
- 是否可以复用旧 Token。
登录态不仅是功能问题,也是安全问题。
九、面试回答模板
如果面试官问“Cookie、Session、Token 怎么区分”,可以这样回答:
Cookie 是客户端保存的数据,浏览器会在请求中自动携带;Session 通常保存在服务端,用来保存用户登录状态,客户端 Cookie 中一般保存 Session ID;Token 是服务端登录成功后返回的令牌,前端或 App 保存后在请求 Header 中携带,比如
Authorization: Bearer token。Session 更常见于传统 Web,Token 更常见于前后端分离和 App。测试时我会关注登录成功后是否下发 Cookie 或 Token,后续接口是否正确携带,未登录、过期、退出登录、权限不足和越权访问是否处理正确。
十、常见追问
追问:Cookie 和 Session 什么关系?
Cookie 通常保存 Session ID,Session 数据保存在服务端。请求带 Cookie 后,服务端根据 Session ID 找到用户会话。
追问:Token 放哪里?
常见放在请求 Header 的 Authorization 中,不建议放 URL,避免被日志和浏览器历史记录。
追问:Token 过期怎么测?
可以等待过期、修改过期时间、使用旧 Token、清除 Token,验证是否返回 401 或合理提示。
追问:退出登录后怎么测?
退出后用旧 Cookie 或旧 Token 再请求接口,应无法访问受保护资源。
十一、练习清单
- 抓包查看 Set-Cookie;
- 查看请求中的 Cookie;
- 登录接口提取 Token;
- 后续接口带 Authorization;
- 测 Token 缺失;
- 测 Token 过期;
- 测退出登录后旧 Token;
- 测普通用户访问管理员接口;
- 检查 Token 是否出现在 URL;
- 准备 Cookie Session Token 面试回答。
Cookie、Session、Token 不是孤立概念,而是登录态、鉴权和安全测试的基础。面试时要结合登录、退出、过期、权限和接口自动化来讲。
配套刷题:

