猿问
下载APP

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

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

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


慕盖茨9453107
浏览 1292回答 3
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,但思路是一样的。

慕哥6287543

可以看下jwt这种token,是不需要存在服务器的,所有认证信息(用户id,过期时间等)是被加密在token当中的,在服务端解密token就可以获取认证信息,不像session需要在服务器那里,根据cookie来取回状态。至于安全问题,jwt+https基本是很安全的了。这种stateless的token还有个好处是他可以无痛拓展,因为session的文件是存放到磁盘上的,当你有第二台服务器时,为了共享登陆,你不得不把session文件转移到redis或其他介质上,而jwt本身自带所有认证信息,直接使用

ibeautiful

不管token很是session_id原理上都是差不多的,token通常是放在接口直接请求,token通常是放在header中进行请求,不管怎么样都需要前后端发起数据交互。不管用token还是session,都没大关系,只要能实现即可。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答