会话保持之cookie session token

HTTP请求是无状态的,但是可以通过cookie, session,token等方式保存请求过程中的用户状态信息。

 

1 cookie

存储在用户本地的客户端, 服务器生成,发送给浏览器,下次请求统一网站给服务器。

服务端为每一个用户签发不同session id发给浏览器存储在cookie,下次访问会带上这个session id,服务端就知道这个访问是哪个用户了。

存在跨域的问题

有的客户端不支持cookie,需要手动设置,比如小程序

浏览器对cookie有限制,不能手动设置cookie,对于混合嵌套的开发有问题,比如小程序跳转H5页面,不能携带cookie

保存数据有限:浏览器对单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

 

2 session

因请求会话而产生,由服务器端创建,存储在服务端,为http提供持久机制,

session是一个容器,可存放会话过程中的任何对象,cookie中存放着一个sessionID,请求时会发送这个ID。

session一定时间内保存在服务器上,当访问增多,比较耗服务器资源。

分布式或者集群部署时存在session共享的问题,(需要引入redis, memcached来解决)

 

3 token

令牌,由uid+time+sign[+固定参数],属于一种临时的证书签名,是服务端发放给客户端的通行证在服务端产生的。

uid: 用户唯一身份标识

time: 当前时间的时间戳

sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接

固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

token在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中

token 的认证流程与cookie很相似

用户登录,成功后服务器返回Token给客户端。

客户端收到数据后保存在客户端

客户端再次访问服务器,将token放入headers中

服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码

常用token认证方案:JWT -- JSON WEB TOKEN

 

 

 

 

posted @ 2020-04-06 14:20  陈小兵  阅读(590)  评论(0编辑  收藏  举报