美文网首页
扩展篇之Cookie,Session,Token的分析

扩展篇之Cookie,Session,Token的分析

作者: 知止9528 | 来源:发表于2019-01-22 21:54 被阅读3次

Cookie

①它是客户端浏览器保存用户信息的一种机制
②不同浏览器有不同的存储大小,但一般不超过4kb
③我们常用的记住密码,就是记录在Cookie中


Session

①它是在服务端保存信息
②数据结构为SessionID和Session内容,以及其它自定义的内容,如用户基础信息,权限信息等.
③它可以保存在集群,数据库,或者文件中.

简要流程如下
如登录
1.浏览器向服务端发起第一次登录请求
2.服务端为用户创建一个SessionId,并在响应内容(Cookie)中将该SessionId一并返回给浏览器,浏览器将这些数据保存到本地.
3.浏览器再次发起请求时,会自动把上次请求存储的Cookie数据携带给服务器.
4.服务器收到请求后,根据SessionId判断出是哪个用户,然后根据SessionId从Session库中获取用户的Session数据返回给浏览器.

如,购物车,添加完商品之后客户端可以通过Session来告诉服务端添加了哪些商品.

此外,Session是有过期时间的

Session生成之后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维持Session。如果超过了超时时间没访问过服务器,Session就会自动失效.


Token

我们前面知道,客户端与服务端一般通过Session来进行交互,客户传入一个SessionId,服务端判断是否存在,而Session的信息我们一般都需要存入到数据库的,那么频繁的交互就会带来性能问题.

那么Token就是服务端生成一个唯一的字符串,作为客户端请求的一个令牌.当客户端第一次访问服务端,服务端会根据传过来的唯一标识userId,运用一些算法,并加上密钥,生成一个Token,然后通过Base64编码一下将这个Token返回给客户端,客户端将这个Token保存起来(可以通过数据库或者文件的形式保存到本地).下次请求时,客户端只要带上这个Token,服务端运用相同的算法和秘钥去验证Token就好了.

这个和Session有什么区别呢?
Session一般我们都持久化到数据库,那么数据库就容易成为瓶颈.
而Token则是在内存中通过加密解密来进行计算,只要能标识出用户就好了.

最简单Token组成:

uid(用户的唯一身份标识),time(当前时间的时间戳),sign(签名,由Token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接Token请求服务器).

对于同一个APP同一个手机当前只有一个Token;手机App会存储一个当前有效的Token。服务端也为Token设置一个有效期,每次APP请求的时候都验证Token和有效期.

相关文章

网友评论

      本文标题:扩展篇之Cookie,Session,Token的分析

      本文链接:https://www.haomeiwen.com/subject/totdjqtx.html