6 回答
TA贡献1827条经验 获得超9个赞
先说Session
HTTP都是无状态的,所以HTTP服务器是不知道你发的这个请求和上一个请求有什么关联性。
『给我来份煎饼』『好』
『鸡蛋』『鸡蛋?』
『再加个鸡蛋』『刚才你点的啥?』
最终得到一份普通煎饼,外加两个疑问
为此引入了Session概念,即服务端和客户端都保存一段文本,每次交互都带着,这样服务器就知道客户端是刚才的那个谁了。
『给我来份煎饼』『好』
『鸡蛋,我是刚才要煎饼那个』『好』
『再加个鸡蛋』『好』
最终得到一份加了两个鸡蛋的豪华煎饼
如果服务器重启或者因为其他理由,Session丢失,那就没了。用户需要重新登录和认证。
『给我来份煎饼』『好』
『鸡蛋,我是刚才要煎饼那个』『好』
…………一阵大风,煎饼摊翻了
『给我来份煎饼』『好』……
再说OAuth2
OAuth2其实没有Session强大,OAuth2的accessToken只能做到 token字符串 → ID + Scope 的程度,scope不知道的话,可以暂时理解为一个权限控制。
OAuth2不能保存状态信息,每一次请求都视为全新请求。
『给我来份煎饼(token我是你对面摊卖烤冷面的,scope赊账)』『好』
『鸡蛋(token我是你对面摊卖烤冷面的,scope赊账)』『好』
『再加个鸡蛋(token我是你对面摊卖烤冷面的,scope赊账)』『好』
最终得到一份普通煎饼,外加两个鸡蛋……
如果服务器重启或者因为其他理由,服务器端的OAuth2已保存数据丢失,那就没了。用户需要重新登录和认证。
『给我来份煎饼(token我是你对面摊卖烤冷面的)』『那个……我没见过你』
总结
这两个玩意虽然都能实现用户认证,但是涉及的范围完全不一样。
Session不仅可以包含认证,还能覆盖非常多的会话相关功能。
TA贡献1826条经验 获得超6个赞
层次不一样,session是代表会话,token代表权限,多数系统将权限和会话混为一潭,或者将权限放到会话下面,导致没有很好区分这个概念。比如匿名用户也有会话,会话结束仍然有权限。
添加回答
举报