jwt-token认证
web服务http请求的无状态性
问题:
由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户。比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,而服务器需要根据某些信息标识出这个用户,这样才知道购物车里面有几本书。
方案:
1)服务器临时存储用户标识(session id 本质就是一个随机字串)。
这样以来,服务器要保存所有用户的session id,如果访问服务器的用户多了,成千上万,甚至几十万上亿。这对服务器来说是一个巨大的麻烦,严重的限制了服务器的扩展能力。
比如说我用两个机器组成了一个集群,小F通过机器A登录了系统,那session id会保存在机器A上,假设小F的下一次请求被转发到机器B怎么办?机器B可没有小F的session id。有时候会采用一点小伎俩:session sticky , 就是让小F的请求一直粘连在机器A上,但是这也不管用,要是机器A挂掉了,还得转到机器B去。
那只好做session 的复制了,把session id在两个机器之间搬来搬去,快累死了。
后来有个叫Memcached的支了招:把session id 集中存储到一个地方,所有的机器都来访问这个地方的数据,这样一来,就不用复制了,但是增加了单点失败的可能性,要是那个负责session 的机器挂了, 所有人都得重新登录一遍,估计得被人骂死。也尝试把这个单点的机器也搞个集群,增加可靠性,但不管如何,这小