做Web测试,尤其是接口测试,经常会遇到鉴权相关的问题:

这些问题,都绕不开三个核心概念:Cookie、Session、Token。这篇文章,我来用最通俗的方式讲清楚它们。

一、先理解问题:Web应用如何”记住”用户?

HTTP协议有一个特点:无状态。服务器收到请求,处理完就忘了,不会记住”刚才谁来过”。

但Web应用需要”记住”用户,比如:

这就需要一个机制,让服务器能”认出”用户。Cookie、Session、Token,就是三种不同的”认人”方式。

二、Cookie:服务器给客户端发的”身份证”

什么是Cookie?

Cookie是服务器发送给浏览器的一小段数据,浏览器会保存起来,下次请求时自动带上。

工作流程:
① 用户首次访问网站
② 服务器响应头中设置:Set-Cookie: userId=123
③ 浏览器保存这个Cookie
④ 用户再次请求时,浏览器自动带上:Cookie: userId=123
⑤ 服务器根据Cookie识别用户

Cookie的特点:

三、Session:服务器端的”档案柜”

什么是Session?

Session是服务器端存储的用户会话数据。服务器给每个会话分配一个ID(Session ID),通过Cookie传给客户端。

工作流程:
① 用户登录成功
② 服务器创建Session,存储用户信息(如userId=123, role=admin)
③ 服务器生成Session ID:abc123
④ 服务器通过Cookie把Session ID发给客户端:Set-Cookie: sessionId=abc123
⑤ 后续请求时,客户端带上Cookie,服务器根据Session ID找到对应的Session数据

Session的特点:

四、Token:自包含的”通行证”

什么是Token?

Token是一个自包含的凭证,本身携带了用户信息,不需要服务器端存储。最常用的是JWT(JSON Web Token)。

工作流程:
① 用户登录成功
② 服务器生成Token,包含用户信息并加密签名
③ 服务器返回Token给客户端
④ 客户端保存Token(通常放在localStorage或Header中)
⑤ 后续请求时,客户端在Header中带上:Authorization: Bearer xxx
⑥ 服务器验证签名,解析出用户信息


Token的特点:

五、三者对比:一张表看明白

维度
Cookie
Session
Token
存储位置
客户端(浏览器)
服务器端
客户端(但数据加密)
安全性
较低(可被篡改)
较高(数据在服务器)
较高(签名防篡改)
服务器压力
无
有(需存储Session)
无
跨域支持
受限(同源策略)
受限
好
移动端支持
一般
一般
好
集群扩展
简单
需Session共享
简单

六、测试中如何应用

基于Cookie/Session的测试要点

基于Token的测试要点

七、常见问题与排查

问题1:接口返回401,但我已经登录了
排查:

————————-

问题2:登录后刷新页面变成未登录
排查:

————————-

问题3:跨域请求带上Cookie失败
排查:

————————-

八、写在最后

Cookie、Session、Token,本质都是解决同一个问题:让服务器能识别用户。只是实现方式不同:

————————-

作为测试工程师,不需要深入理解它们的技术实现,但需要知道:

  1. 系统用的是哪种方式
  2. 测试时如何模拟登录状态
  3. 鉴权失败时如何排查

总结:搞懂Cookie、Session、Token,Web测试中的鉴权问题就解决了一大半。下次遇到401,别慌,按这篇文章的思路排查。