Http 协议是一个无状态协议, 客户端每次发出请求, 请求之间是没有任何关系的。可是当多个浏览器同时访问同一服务时,服务器怎么区分来访者哪一个是哪一个呢?mysql
cookie、session、token 就是来解决这个问题的。web
若是说 cookie 是客户身上的“通行证”,那么 session 就是服务器上的“客户明细表”。客户第一次访问服务器,服务器会保存客户的信息,并给客户一个 cookie,下一次客户携带 cookie 访问服务器时,服务器会经过该 cookie 在客户明细表(session)中找出该用户信息,服务器就知道是哪一个在访问了。redis
token 也称做令牌, 注意在客户端里存 userid(也就是token)、用户信息、密文,而服务端只有一段加密代码,用来判断当前加密后的密文是否和客户端传递过来的密文一致,若是不一致,就是客户端的用户数据被篡改了,若是一致,就表明客户端的用户数据正常且正确。sql
token 在客户端通常存放于localStorage,cookie,或sessionStorage中。在服务器通常存于数据库中。token 组成:数据库
· uid: 用户惟一身份标识 · time: 当前时间的时间戳 · sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接 · 固定参数(可选): 将一些经常使用的固定参数加入到 token 中是为了不重复查库
token 认证流程与 cookie 相似:浏览器
1. 用户登陆,成功后服务器返回Token给客户端。 2. 客户端收到数据后保存在客户端 3. 客户端再次访问服务器,将 token 放入 headers 中 4. 服务器端校验。校验成功则返回请求数据,校验失败则返回错误码(401)
缓存数据库
,数据存放在内存
中, 可存储的数据量较小,可是读取速度较快关系型数据库
,存储在硬盘
中,可存储的数量较大,可是读取速度较慢