讲token需要先复习一下cookie和session。
客户端保存用户信息的方式,也是session实现机制之一。
我们每次打开一个以前打开过的编辑栏,他可能会自动填写我们以前填的内容,这就是cookie机制啦。
但是cookie特别小,一般不超过4kb,所以只存一些用户信息。
存在服务端里用于验证客户端身份的,同时也带有一大堆自定义信息,这里就有很多操作了。
客户端访问服务端的时候,就会把这玩意留在服务器上。
不止是账号密码,比如客户端想知道你买了啥,就需要用到session啦。
但是session需要存在服务端上,很费服务端空气。
token相当于是进步的session,它不再需要存在服务器上了,只需要双方用算法验证即可。
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌。当客户端第一次访问服务端,服务端会根据传过来的唯一标识userId,运用一些算法,并加上密钥,生成一个Token,然后通过BASE64编码一下之后将这个Token返回给客户端,客户端将Token保存起来(可以通过数据库或文件形式保存本地)。下次请求时,客户端只需要带上Token,服务器收到请求后,会用相同的算法和密钥去验证Token。
最简单的Token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由Token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接Token请求服务器)。
盐:就是我们常见的md5算法啦。
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
同样,如果频繁获取该token,服务端就要多次进行计算,也非常浪费资源。
这时候我们就可以引入redis,用于保存token,把重复的token都拦下来!