为了账号安全,请及时绑定邮箱和手机立即绑定

为何说 Token 是 restful,而Cookie/SessionID 则不是?

/ 猿问

为何说 Token 是 restful,而Cookie/SessionID 则不是?

慕盖茨9453107 2018-06-27 10:02:42

如果SessionID和Token都存在 redis 里让多个服务器共享 
那没什么区别吧?

关于有无状态和是否restful
他们都需要在服务端保存信息,我觉得都是stateful
为何有的说Token就是stateless和restful,而Cookie/SessionID 则不是?


查看完整描述

3 回答

?
慕函数4003404

很多人是按session的方式来使用token,所以觉得两者一样。

session思维是这样:传递sessionID或者所谓的token到服务端,然后服务端根据这个键值找到用户数据,也许是session文件,也许在redis里,然后读取里面的数据uid=1,至此用户身份确立。

而真正的token思维是这样:uid=1直接保存在客户端,当然不会只保留这么简单的数据,很容易伪造。实际保存数据可能是这样uid=1|6166b2002fdcb5df,后面一部分签名是根据第一部分数据加密所得,而加密算法只有服务端知道,你就没办法伪造数据了。服务端获取这个token后,对第一部分数据验签,和第二部分比对,如果一致,直接确立用户身份uid=1。整个操作直接在内存中运算,不需要读取session文件或redis。你甚至可以把整个用户信息uid=1&nickname=xxx&money=1000保存到token里。

比如常用的JWT,是用 . 分割成3部分,每部分再base64_encode,但思路是一样的。


查看完整回答
反对 回复 2018-07-21
?
慕哥6287543

可以看下jwt这种token,是不需要存在服务器的,所有认证信息(用户id,过期时间等)是被加密在token当中的,在服务端解密token就可以获取认证信息,不像session需要在服务器那里,根据cookie来取回状态。

至于安全问题,jwt+https基本是很安全的了。这种stateless的token还有个好处是他可以无痛拓展,因为session的文件是存放到磁盘上的,当你有第二台服务器时,为了共享登陆,你不得不把session文件转移到redis或其他介质上,而jwt本身自带所有认证信息,直接使用


查看完整回答
反对 回复 2018-07-21
?
ibeautiful

不管token很是session_id原理上都是差不多的,token通常是放在接口直接请求,token通常是放在header中进行请求,不管怎么样都需要前后端发起数据交互。不管用token还是session,都没大关系,只要能实现即可。

查看完整回答
反对 回复 2018-07-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信