背景
在B站看到一个up的详细解说cookie、session、token觉得讲的挺透彻的,于是就趁热记录一下。
一、鉴权是什么?
鉴权就是鉴定权限,最常见的就是鉴定该用户是否为登录状态。最开始做接口测试的时候,找了一个接口,把协议、ip、URL填好以后就以为万事大吉。一发起请求,查看响应就说登录信息错误。
为什么呢?
这就是因为没有鉴权,服务器根本就不认识你,所以就不理你,请求的数据就不会发送给你了。
说到这里,又不得不说一下http协议的工作原理。
简单来说,就是客户端(浏览器)发起请求,服务器端接收到请求,根据请求参数解析到对应的资源,再返回给客户端的过程。
然后再来说说cookie、session、token。
二、cookie、session、token
1.cookie
cookie是鉴权的方式之一,是客户端登录后,服务器端生成后发送给客户端的。cookie可以保存很多种数据,但是他只能保存字符串,且在安全性上有隐患。
在客户端发起请求后,服务器端生成一个cookie,并发送给客户端,保存在客户端本地,下次请求的时候带上cookie。
2.session
session是一种会话,比如我发起请求到关闭浏览器这个过程就是一个会话。session是鉴权的方式之二,在客户端发起请求后,服务器生成一个对应的session,并保存在服务器中,再把session保存到cookie里面,通过cookie发送给客户端,客户端接收到cookie过后,下一次请求时就会把cookie带上,服务器收到请求中的session后就会把它与之前保存的session做对比,如果是一样的,那就说明是已经登录过的,如果不一样,那就需要重新登录。
3.token
token是一个令牌,是鉴权方式之三,他是由一部分固定的header、以及body组成的,在body中可以放userid+电话号码,等用户的非隐秘信息,然后再通过某种加密方式,把这两部分加密形成一个秘钥。
在客户端发起请求后,服务器会生成一个token,可以通过cookie也可以直接发送给客户端,客户端接收到token后,会把它保存在本地,在下一次请求时,会带上,服务器端收到二次请求以及带上的token后,会再根据用户的信息去加密一个token,再把两次token进行比对,如果是相同的,那就不用再登录了,如果不一样就需要再重新登录。
总结
cookie、session、token的区别
1.生成的位置相同:cookie、session、token都是在服务器端生成;
2.保存的位置不同:cookie、token保存在客户端本地,session保存在服务器;
3.鉴权过程不同:
cookie是将请求中携带的cookie与服务器记录的cookie做对比;
session是将请求中携带的session与服务器存储的session做对比;
token是将请求中携带的token与服务器通过请求中的信息(userid、签名)生成的token作对比。