session、cookie、token的区别
- Cookie
是什么?
Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据。
它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
特点:
存储在客户端:保存在用户的浏览器里。
大小限制:通常有大小限制(约4KB)。
不安全:存储在本地,容易被恶意脚本(如XSS攻击)读取,因此敏感信息不应直接放在Cookie里。
可被设置过期时间:可以设置成会话级别(浏览器关闭就失效)或持久级别(有固定的过期日期)。
作用:
最主要的作用是“状态管理”,弥补HTTP协议无状态的特性。
记录用户信息(如用户名、语言偏好)、跟踪会话(最常见的就是存储Session ID)。
- Session
是什么?
Session 是一种服务器端的机制,用来在多个请求之间保存用户的状态信息。
服务器为每个用户创建一个唯一的Session对象,并生成一个对应的Session ID。
特点:
存储在服务器端:数据保存在服务器的内存、数据库或缓存中,相对安全。
依赖Cookie:服务器通常会把 Session ID 通过 Set-Cookie 响应头发送给客户端,客户端在后续请求中通过Cookie自动带上这个ID,服务器根据ID找到对应的Session数据。
服务器开销:当用户量巨大时,服务器需要维护大量的Session,会消耗较多服务器资源。
分布式问题:如果网站是分布式部署(多台服务器),需要解决Session共享问题(如使用Redis等中央缓存来存储Session)。
作用:
记录用户的登录状态、购物车信息等敏感或复杂的数据。
- Token (通常指 JWT - JSON Web Token)
是什么?
Token 是一串按照特定规则生成的字符串,它包含了用户的信息和签名。
最流行的实现是 JWT (JSON Web Token)。一个JWT由三部分组成:Header(头部)、Payload(载荷)、Signature(签名)。
特点:
无状态:这是Token最核心的优势。服务器不保存任何状态信息。Token本身包含了所有需要验证的数据。
自包含:Payload部分可以存放用户ID、权限等信息,服务器拿到Token后直接解析即可,无需查询数据库。
跨域/跨服务友好:非常适合微服务架构和单页面应用。一个Token可以在多个不同的服务间被验证。
安全性相对更高:如果使用HTTPS传输,并且不在Payload里放敏感信息(如密码),Token是相对安全的。签名可以防止数据被篡改。
存储位置灵活:可以存储在Cookie、LocalStorage或SessionStorage中。如果存在LocalStorage,需要手动在请求头中携带(通常是 Authorization: Bearer
作用:
身份认证和授权。特别适用于API接口、前后端分离项目、移动App等。

浙公网安备 33010602011771号