Session、Cookie 和 Token 的区别

118 阅读2分钟

Session、Cookie 和 Token 的核心区别在于存储位置和认证机制,Session 存储在服务端,Cookie 存储在客户端,Token 则是无状态的客户端认证凭证。

1. 核心定义与存储位置

Session(会话):存储在服务端(如服务器内存、数据库),通过一个唯一的“Session ID”识别用户。

Cookie:存储在客户端浏览器,是服务端发送给客户端的小型文本文件,可用于携带 Session ID 或保存用户偏好。

Token(令牌):存储在客户端(如浏览器 localStorage、APP 内存),是服务端生成的一串加密字符串,直接包含用户身份信息。

2. 认证流程差异

Session 认证流程

1.用户输入账号密码登录,服务端验证通过后,创建一个 Session 并生成对应的 Session ID。

2.服务端将 Session ID 写入客户端 Cookie,浏览器后续请求会自动携带该 Cookie。

3.服务端通过 Cookie 中的 Session ID,查询对应的 Session 数据,确认用户身份。

Cookie 认证流程(单独使用时)

1.服务端直接将用户身份信息(如用户 ID)加密后写入 Cookie,发送给客户端。

2.客户端后续请求自动携带该 Cookie,服务端解密 Cookie 内容即可确认用户身份(安全性较低,易被篡改)。

Token 认证流程

1.用户登录后,服务端验证通过,根据用户信息(如用户 ID、权限)生成 Token(通常用 JWT 格式)并返回给客户端。

2.客户端存储 Token,后续请求通过 HTTP 头(如 Authorization: Bearer Token)携带 Token。

3.服务端接收 Token 后,无需查询数据库,直接解密 Token 即可验证用户身份(无状态,不依赖服务端存储)。

3. 关键优缺点对比

特性SessionCookieToken
服务端压力高(需存储会话数据)低(数据存客户端)极低(无状态,无需存储)
跨域支持差(依赖 Cookie,跨域受限)差(默认不支持跨域)好(HTTP 头携带,支持跨域)
安全性中(Session ID 易被劫持)低(易被篡改、窃取)高(加密,可设置过期时间)
扩展性差(分布式系统需共享 Session)好(适合分布式、微服务)