在前后端身份认证的学习中,知道为什么会有session和token,比知道如何使用它们还重要!!!
随着交互式Web应用的兴起,需要登录的网站都面临管理会话问题。就是必须记住哪些人登录系统, 哪些人往自己的购物车中放商品,哪些人给别人点赞了。也就是说服务器必须记住当前发来请求的客户是谁,因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识,这就是session机制。
一. Session机制
Session和Cookie需要配合使用进行浏览器身份认证。
1. 原理
① 首次请求
浏览器首次请求服务器,携带的用户的信息,服务器将用户的信息存储到session库中,并给了这条信息一个独一无二的key值。然后将key值在响应头set-cookie字段返回给浏览器。
② 再次请求
浏览器会自动携带和服务器以及当前网页地址同一域名下的所有未过期的Cookie。服务器拿到Cookie之后,找到sid字段对应的key值,然后去session库中查找用户信息。
🛍️一秒记住
Cookie就是会员卡,Session就是刷卡认证机制。Cookie保存在用户那里,Session在超市那里。你每次去超市购物都带着会员卡,超市通过刷卡就可以知道你是谁啦,可以有针对性地用掉你的优惠券,生日优惠等。
2. 缺点
① 同源限制
浏览器请求头发送Cookie,要求当前网页与客户端同源,才能发送该地址下对应的cookie。
啥意思呢,你要带着沃尔玛的会员卡去沃尔玛购物,你必须坐沃尔玛家的车去,如果随便打辆出租去,会员卡不会跟和你走。(坑爹吧
② session限制服务器扩展能力
如果只有一个服务器,那session表就存那里。
服务端不可能只有一个服务器,用户登录是在服务器A,那购物请求被转到服务器B咋整?
每个服务器存一个session表,太占资源,pass。如果利用session sticky让用户都访问指定服务器,那如果服务器挂了,咋整。有人说,那把session表存在一个专门的服务器中,别人都来他这里查找不就行了,但是这样增加了单点失效的可能性,如果这个服务器挂了,所有用户重新登录一遍,会被骂死吧。。。
服务器:md我不想存这张破表了!
所以就有了token
二. Token机制
token是令牌,是将用户的信息加密生成的一串字符。
1. 原理
① 首次请求
浏览器首次请求服务器,携带的用户的信息,服务器将用户的信息按照一定的秘钥加密成token令牌,在返回信息中给浏览器,浏览器拿到将它存在local storage或者session storage中
② 再次请求
浏览器请求头配置Authoriation字段为"Bear "+token
,服务器拿到之后,进行解码,就知道用户名啦
2. 特点
① 与Session机制区别
服务器不保存session了,只是生成token,让客户端保存。然后验证token,用CPU计算时间换取session 存储空间!
② 明文加密
加密用户信息为token时,因为是明文加密,不安全,不要在其中保存像密码这样的敏感信息。用户ID还是可以的。