搜索

什么是cookie,token和session?它们之间有什么关系?

发布网友 发布时间: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 保存在客户端,通过签名校验来验证。在不同场景下选择合适的机制,可以达到更高效和安全的用户体验。希望以上内容能帮助大家更好地理解和运用这些机制。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
Top