2022-06-03 09:43:28
Cookie、Session、Token 本质是Web应用中用于身份验证和会话管理的技术,分别通过客户端存储、悔游歼服务端存储、加密令牌三种方式实现用户状态跟踪,各有其独特的发展背景、实现原理和适用场景。以下是对三者的详细解释:
Cookie存储位置:存在于客户端,浏览器对其有数量、大小等限制,每个域的Cookie数量有限,以保障安全并避免占据过多磁盘空间。
安全性:浏览器加入限制确保其不被恶意使用,但因数据存储在客户端,仍存在一定安全风险,如被窃取或篡改。
应用场景:适用于存储少量、非敏感信息,如用户偏好设置、浏览历史等,常用于自动登录、记录用户行为等场景。

存储位置:用户信息存储在服务端,相对Cookie更安全,但会占用服务器内存资源。
可扩展性问题:若Web服务器做负载均衡,下一个请求可能发到另一台服务器,导致Session丢失,需采用Session sticky(让请求一直粘连在某台服务器上)、Session复制(在服务器间同步Session数据)或集中存储(如使用Memcached集中存储Session,但存在单点失败风险)等方式解决,但都增加了系统复杂性和开销。
应用场景:适用于对安全性要求较高、需要存储较多用户信息的场景,如在线购物网站的购物车信息、用户登录状态等。

无状态、可扩展:服务器不存储用户信息,仅负责生成和验证Token,减轻了服务器存储负担,使服务器集群可轻松水平扩展,用户访问量增大时直接加机器即可。
安全性
防止伪造:通过签名机制确保Token无法被伪造,只有服务器能生成有效签名。
防止CSRF攻击:请求中发送Token而非Cookie,可有效防止跨站请求伪造攻击。
时效性与撤回:Token有时效性,一段时间后需用户重新验证;还可通过Token撤销操作使特定Token或一组相同认证的Token无效。
多平台跨域:支持移动设备,可跨程序调用,只要用户有有效Token,数据和资源可在任何域上被请求,解决了CORS(跨域资源共享)问题。
应用场景:适用于多用户、分布式系统、移动应用等场景,如大多数使用Web API的互联网公司(如Facebook、Twitter、Google+、GitHub等)都采用基于Token的身份验证。