Cookie、session和token的区别和联系
1.Cookie
cookie是浏览器中 永久保存的数据,对于不同浏览器展示的数据也不同。
是保存在客户端本地的小缓存。
特点:体积小,以明文的形式保存,不存敏感的数据。一般由服务器产生,保存在客户端,每次请求都会携带有效cookie。
由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的
2.Session
特点:服务器生成,存储在服务端,并且会通过cookie发送给客户端,进行等值匹配。等到用户离开网站之后session就会被销毁。
缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。服务器需要保存所有人的Session,导致服务器负载很大。
3.token
3.1 起源
基于服务器验证方式暴露的一些问题
-
Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。
-
可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。
-
CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况。
-
CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站在这些问题中,可扩展行是最突出的。因此我们有必要去寻求一种更有行之有效的方法。
3.2 基于token的验证原理
用户通过用户名和密码发送请求;
程序验证;
程序返回一个签名的token 给客户端;
客户端储存token,并且每次用于每次发送请求;
服务端验证token并返回数据。
每一次请求都需要token,token在http的头部发送从而保证了http请求无状态。
实现思路如下:
-
用户登录校验,校验成功后就返回Token给客户端。
-
客户端收到数据后保存在客户端
-
客户端每次访问API是携带Token到服务器端。
-
服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码
优点:时间换空间,更加安全;可扩展:能够创建与其他程序共享创建的程序;多平台跨域。
了解:
token中数据的传输结构如下:
数据传输也是通过明文的方式进行传输,会根据加密算法进行加密。服务器接受到数据之后使用和加密算法对应的解密方法解密,之后和发送报文比对看是否通过验证。