1.session、cookie、token的区别 2.cookie和缓存的区别
一、session、cookie、token的区别
三者核心都是为了解决HTTP无状态的身份验证问题,存储位置、工作机制、适用场景差异显著,用表格可清晰区分:
特性 Cookie Session Token
存储位置 客户端(浏览器/本地) 服务器端(内存/数据库/Redis) 客户端(LocalStorage/内存等)
存储容量 约4KB,容量小 无明确限制,取决于服务器资源 无固定限制,由设计决定
数据类型 键值对字符串,仅存非敏感数据 可存储复杂对象(用户信息、权限) 加密字符串,可包含用户标识等
工作机制 服务器通过 Set-Cookie 下发,客户端自动携带 服务器生成SessionID,通过Cookie传递给客户端,依ID匹配会话 服务器验证登录后生成,客户端手动携带(请求头/参数)
状态性 客户端存储,无状态相关 服务器维护状态,有状态 服务器不存储,无状态
分布式支持 需配合Session共享,否则不支持 需做Session集群/共享(如Redis) 天然支持,无需服务器存储
安全风险 易受XSS、CSRF攻击 依赖Cookie传递SessionID,同Cookie风险 防XSS(存LocalStorage),无CSRF风险
典型适用场景 简单登录、会话保持 传统单体应用登录 分布式系统、前后端分离、APP接口
简单总结:
- Cookie是客户端的“小记事本”,存标识供服务器识别;
- Session是服务器的“用户档案柜”,靠Cookie里的SessionID找对应档案;
- Token是客户端持有的“身份令牌”,服务器验令牌不存令牌,适配分布式。
二、cookie和缓存的区别
这里的缓存指浏览器缓存(如资源缓存、本地存储缓存),二者是完全不同的技术概念,核心差异在用途、管理方式、生命周期上:
特性 Cookie 浏览器缓存(含HTTP缓存、LocalStorage等)
核心用途 存储用户身份标识、会话信息,实现登录状态保持 缓存静态资源(图片、JS、CSS)、本地存储数据,提升页面加载速度
管理主体 服务器通过 Set-Cookie 控制,客户端自动遵守 浏览器按缓存规则(如 Cache-Control )或前端JS手动管理(如LocalStorage)
生命周期 可设置 Expires/Max-Age (持久Cookie),或会话结束即失效(会话Cookie) HTTP缓存:按 Cache-Control (如 max-age )或过期时间;LocalStorage:永久存储,除非手动删除
存储容量 约4KB,单域名下数量有限(一般20个) HTTP缓存无固定容量(随浏览器而定);LocalStorage约5MB
传递方式 每次请求同一域名时,自动在请求头中携带 静态资源缓存仅在首次请求后存储,后续请求直接从本地读取,不随请求传递;LocalStorage仅前端JS访问,不参与HTTP请求
使用场景 登录状态、记住密码、购物车临时数据 缓存网站图片/脚本、存储前端业务数据(如用户偏好设置)
简单总结:
- Cookie是“身份凭证”,为服务器识别用户服务,会随请求往返传输;
- 缓存是“资源仓库”,为浏览器提速服务,数据大多留在本地,不参与请求交互。
浙公网安备 33010602011771号