Cookie、session和token的区别和联系

1.Cookie

cookie是浏览器中 永久保存的数据,对于不同浏览器展示的数据也不同。

是保存在客户端本地的小缓存。

特点:体积小,以明文的形式保存,不存敏感的数据。一般由服务器产生,保存在客户端,每次请求都会携带有效cookie。

       由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的

2.Session

      特点:服务器生成,存储在服务端,并且会通过cookie发送给客户端,进行等值匹配。等到用户离开网站之后session就会被销毁。

      缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。服务器需要保存所有人的Session,导致服务器负载很大。

3.token

 3.1 起源

   基于服务器验证方式暴露的一些问题

  1. Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。

  2. 可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。

  3. CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况。

  4. CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站在这些问题中,可扩展行是最突出的。因此我们有必要去寻求一种更有行之有效的方法。

   3.2 基于token的验证原理  

       用户通过用户名和密码发送请求;

       程序验证;

       程序返回一个签名的token 给客户端;

       客户端储存token,并且每次用于每次发送请求;

       服务端验证token并返回数据。

       每一次请求都需要token,token在http的头部发送从而保证了http请求无状态。

       实现思路如下:

        

Cookie、session和token的区别和联系

  1. 用户登录校验,校验成功后就返回Token给客户端。

  2.  客户端收到数据后保存在客户端

  3. 客户端每次访问API是携带Token到服务器端。

  4. 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

   优点:时间换空间,更加安全;可扩展:能够创建与其他程序共享创建的程序;多平台跨域。

 

    了解:

    token中数据的传输结构如下:

   

Cookie、session和token的区别和联系

      数据传输也是通过明文的方式进行传输,会根据加密算法进行加密。服务器接受到数据之后使用和加密算法对应的解密方法解密,之后和发送报文比对看是否通过验证。