总结说在前面:
- session:起源于服务端,保存在服务端(服务器或者数据库),通过cookie传递给用户,用户每一次发送HTTP请求的时候,通过验证cookie中的session-id来验证用户身份。
- jwt(json web token):起源于服务端,保存在浏览器(cookie或者storage),和session一样,用户每一次发送HTTP请求的时候,携带token,通过算法来验证token的正确性。
一开始的cookie通过明文存储username和password,然后传递给服务器,但是这种方式可以将数据传递给服务器,也可以被黑客拦截。
所以session出现了,session-id是一段字符串,被保存在服务器和浏览器中,每一次通过比对和算法验证,来验证用户身份。然而,虽然不是明文传输了,但是session-id一样可以被黑客获得。当然,相对之前的cookie,安全性没事提高了一些的。
随着用户量增多,数据量也增大了。服务器存储不下,这么多的session-id了。一开始是想要使用分布式存储,也就是一台机器放不下的数据,我就多拿几台机器来存储。但是,如果我拿着一个session-id去请求一个没有存储我这个session-id的服务器的话,就会”鉴权“失败。
因此,jwt(json web token)出现了,jwt有三部分组成:【加密算法.携带数据.签名】,这些数据被base64编码之后进行发送。(注意:base64编码可以被双向加解密,所以相当于明文发送)这些数据会被保存在浏览器中,每一次发送给服务器的时候,只需要验证签名是否相同即可。