0
点赞
收藏
分享

微信扫一扫

Cookie、Session、Token的区别:基于Session的验证机制和基于Token的验证机制

微言记 2022-03-11 阅读 167

Cookie、Session、Token的区别

  • 《基于Token的登录流程》
  • 《彻底理解Cookie、Session、Token》

1、Cookie

Cookie是一个很具体的东西,就是浏览器里面的一种能永久保存的数据,仅仅是浏览器实现的一种数据存储功能。

Cookie存储在浏览器中,其结构是键值对形式,但只能存储ASCII码字符

Cookie的大小受浏览器限制,很多是4K大小

Cookie不太安全,容易被恶意查看

2、Session

Session是存储在服务器上的用于保存用户信息、会话状态以及相关属性的一块数据对象,可以理解为是一个身份标识,主要用于识别客户端用户的身份

Session存储在服务器中,其结构也是键值对,但值可以存储任意数据类型

Session的大小理论上受当前服务器的内存限制

Session因为存在服务器上,相对安全一些

基于Session的认证:
  1. 用于登录网站,提交包含用户名和密码等认证信息的表单,放在HTTP请求报文中
  2. 服务器验证这些信息,无误的话,生成Session并存在服务器上(可以是文件、数据库、内存),该Session有一个属性Session ID
  3. 服务器在返回响应报文中的Set-Cookie字段中包含该Session ID
  4. 客户端收到Session ID后保存在自己的Cookie中,之后的每次请求都带上该Cookie值,服务器收到后,进行验证,就可以识别客户端身份

3、Token

3.1 为什么要用Token?基于Session的验证机制不好吗?
  1. 首先是Session需要占用服务器的物理资源,如果有少量的用户那还好说,可如果有几十万、上千万的用户,那么这些Session对服务器就是巨大的开销

  2. 巨量的Session会限制服务器的扩展能力:假如有一个服务器集群,客户甲通过机器A登录的系统,那么属于客户甲的Session就存储在机器A上。假如客户甲下次访问时被转发到了机器B上,但B却没有他的Session。就算通过某种机制将客户甲的请求都转发到机器A上,也存在问题,如果机器A宕机了,还是要转发到机器B上。那就只能复制…每台机器上都复制其他机器上Session。

    请添加图片描述

所以就出现了基于Token的验证机制!且看下文

3.2 Token的验证机制是怎么样的?

Token是一个令牌,由服务器生成,然后保存在客户端,每次客户端发送请求都带上这个Token;服务器验证该Token的正确性。

Token就像是一个身份证,由服务器签发和验证,在有效期内都具有合法性

服务器不将用户信息存储在服务器或Session中

Token的产生:

比较笼统的讲就是:

  1. 服务端在客户端成功登录之后,使用与客户端相关的数据信息(暂时称其为元数据)进行编码,然后再使用只有服务器知道的密钥进行加密,生成一个数字签名,组合起来就成了Token
  2. 该Token具有表征客户端状态的信息,也具有数字签名
  3. 每次接收到带有Token的请求后,服务器重复一下第1步的加密,生成数字签名,两者对比也即验证Token的合法性
  4. 如果Token合法,再进一步解析Token携带的会话相关的状态信息

如果不理解的话,可以看一下这篇文章—>《基于Token的登录流程》以JWT(JSON Web Token)为例,清晰明了

整个依据Token的验证机制过程大致如下:
  1. 客户端用户通过用户名和密码登录发送请求进入网站
  2. 服务器验证其身份,成功之后,生成Token返回客户端
  3. 客户端存储Token,接下来每次给服务器发送请求时都带上该Token
  4. 服务端又收到客户端的请求,通过验证Token,校验成功就返回数据,不成功就返回错误码

请添加图片描述

举报

相关推荐

0 条评论