前提:HTTP是一个无状态协议,每一次的请求都是独立的。意思就是登录了购物网站,把商品加入购物车准备结算时,网站不认识你了,需要重新登录。
如果每次请求都能自动携带一个暗号,网站服务器对一下暗号,进行放行或拦截。这就是session id。
cookie是保存session的一种方式。cookie由服务器生成,存储在客户端浏览器中。
服务器也需要保存每个人的session id,对于大型网站,具有负载均衡,请求可能被转向服务器A或服务器B、C…,每台服务器都需要存储session id,服务器不堪重负。(使用IPhash,对固定ip的访问转发到固定服务器或可解决)
token由uid+time+sign[+固定参数]组成。包含了用户的user id,服务器使用公开算法+自己的密钥对user id等数据做个签名,服务器也不用保存token,每次请求时计算一遍签名是否一致,用CPU计算能力换取存储空间。
不准确的比喻,session是门禁卡,token是把门禁卡录入手机实现手机开门,cookie是口袋,能装门禁卡和手机。
网友评论