发布网友 发布时间:2024-10-24 05:46
共1个回答
热心网友 时间:2024-10-31 21:20
相信项目中用JWT Token的应该不在少数,但是发现网上很多文章对 token 的介绍有误,所以对 cookie,session, token 作了一下对比。以下内容希望能帮助大家深入了解这三种机制。
Cookie
Cookie 诞生于1991年,最初是为了满足浏览 web 文档的需求,无状态的 HTTP 协议使得两个连接之间没有联系。随着交互式 web 的兴起,需要记录用户的行为,如登录、评论和购物等。Cookie 就应运而生,用于识别用户的会话。
Cookie 是小型文本文件,用于存储用户身份信息,通常由服务器返回给客户端浏览器,保存在用户的本地终端上。工作机制如下:每次请求后,服务器将用户信息(如购物车商品ID)存储在 Cookie 中,浏览器会将 Cookie 保存下来,下次请求时携带 Cookie,使得服务器能识别用户身份和状态。
然而,随着购物车商品数量增加,Cookie 大小也相应变大,给每次请求带来负担。此时,需要引入 Session 机制来解决问题。
Session
Session 用于识别哪个请求是由哪个用户发起的,它通过在 Cookie 中存储能识别用户身份的信息,如 sessionId,大大减少了 Cookie 的体积。请求体仅需携带本次操作的相关信息(如加入购物车的商品ID),服务器在收到请求后基于 sessionId 找到用户信息,处理操作。
Session 的问题在于服务器需要保存会话状态,导致负载均衡时,如果用户请求分配到不同的服务器节点,服务器之间无法共享会话信息。为解决此问题,通常采用 复制会话、粘连会话或共享会话 的方式。
Token:无 session!
为了解决 session 的局限性,引入了 Token 机制。Token 是一种用户身份验证机制,由服务器生成后存储在客户端,如浏览器的本地存储。客户端在后续请求中携带 Token,服务器通过校验 Token 来确认用户身份。
Token 机制的优点是实现分布式存储,扩展性好,尤其适用于移动端和跨域场景。然而,Token 也存在一些缺点,如过长的 Token 长度可能导致 Cookie 超限,以及存储在本地存储的安全性问题。
总结:Session 和 Token 都是用户身份验证机制,只是实现方式不同。Session 保存在服务器端,依赖 Cookie 来识别用户,而 Token 保存在客户端,通过签名校验来验证。在不同场景下选择合适的机制,可以达到更高效和安全的用户体验。希望以上内容能帮助大家更好地理解和运用这些机制。