Cookie、Session、Token

本文深入解析Cookie和Session的工作原理及应用场景,对比二者在安全性、数据类型、存储位置、跨域支持等方面的差异,同时介绍Token机制及其在身份验证中的作用。

Cookie 和 Session 的区别

  1. Cookie 数据存储在客户端,对客户端是可见的,所以客户端的一些程序可能会窥探或者修改Cookie里的内容,而Session 数据存储在服务端,对客户端不可见,所以 Session 相比 Cookie 更安全。
  2. Cookie 只能存储 ASCII (阿寺kei)字符串,Session 可以存储任何类型的数据。
  3. Cookie可以通过设置过期时间来灵活设置不同场景下对用户信息的保存时间,而Session不能像cookie那样长久的保存信息,因为如果对它长久保存,那么服务端的Session就会越来越多,从而导致内存溢出。
  4. Cookie 支持跨域名访问,Session 不支持跨域名访问。(跨域是指从一个域名的网页去请求另一个域名的资源)
  5. 单个 Cookie 保存的数据<=4KB,一个站点最多保存20个 Cookie;而对于 Session 来说没有上限,但是出于对服务器端性格的考虑,Session 内尽量不要存放过多的东西。

Cookie

  • Cookie 由服务端生成,存储在客户端,用于保存用户信息。
  • Cookie 主要用于三个方面:
    • 会话状态管理:比如用户登录状态、购物车、游戏分数等。
    • 个性化设置:比如用户自定义设置。
    • 浏览器行为跟踪:比如跟踪分析用户的行为。
  • Http 协议是无状态的,如果想记录用户的状态可以使用 Cookie 保存 session 或 token ,然后向后端发送请求时带上 Cookie,这样后端就能取到 session 或 token了。

Session

  • Session 存储在服务端,用于在服务端记录客户端的信息。
  • 相比 Cookie ,安全性更高。

Token

  • 由于 Session 存储在服务器中,就会出现容量开销问题,如果将 Session 集中存储在一台机器上,虽然可以解决容量不足的问题,但如果这台机器挂了,那 Session 就都用不了了,即便对这台机器做出个集群,也会是个负担。可以采用服务器不存放 Session,而是通过 Token 来进行验证的方法。
  • token具体原理是:服务器对发来的数据加上一个密钥,做成一个签名,把这个签名和数据一起作为token发送给客户端。客户端存储token,并且再次发起请求时带上这个token,服务器收到信息后会验证token,验证方法是对这个数据再计算一次签名,然后和token中的签名进行比较,如果不同,就表示数据被篡改过了。

如何使用Session进行身份验证?

  1. 用户向服务器发送用户名和密码用于登陆系统。
  2. 服务器验证通过后,服务器为用户创建一个 Session,并将 Session 信息存储起来。
  3. 服务器向用户返回一个 SessionID,写入用户的 Cookie。
  4. 当用户保持登录状态时,Cookie 将与每个后续请求一起被发送出去。
  5. 服务器可以将存储在 Cookie 上的 SessionID 与存储在内存中或者数据库中的 Session 信息进行比较,以验证用户的身份,返回给用户客户端响应信息的时候会附带用户当前的状态。
Session与Cookie的区别:
  • Cookie和Session都是会话技术,Cookie运行在客户端,Session运行在服务器端。
  • Cookie 数据存储在客户端,容易被恶意查看。可以将 Cookie 信息加密,然后在服务器解密来提高安全性。
  • Cookie 只能存储字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值