维度 | Cookie | Session | Token |
存储位置 | 客户端(浏览器) | 服务器端(内存/数据库/Redis) | 客户端(LocalStorage/内存/Cookie) |
数据传递方式 | 自动通过 HTTP 请求头携带 | 依赖 Cookie 中的 Session ID 传递 | 需手动添加到请求头(如 ) |
数据可见性 | 明文存储(可被篡改) | 服务端加密存储 | 可加密签名(如 JWT) |
session存储于服务器,可以理解为一个状态列表,拥有一个唯一识别符号sessionId,通常存放于cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session,依赖cookie。
cookie类似一个令牌,装有sessionId,存储在客户端,浏览器通常会自动添加。
token也类似一个令牌,无状态,用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户,需要开发者手动添加。