Token是什么?
Token是令牌、凭证、钥匙,在Web领域中进行身份验证,关键点在验证!!,说验证就必须了解一下Web领域的发展史呢。
- 刚开始的Web,就是浏览文档的功能,浏览器进行http请求,服务器进行响应,每一次的请求都是一样的,属于无状态的,服务器就是你请求什么,响应什么,不用考虑你是谁这个问题。
2. 随着人们需求的改变,比如在线购物系统,需要登陆的网站等,这时候需要进行交互性,服务器接收到请求的时候,要根据你是否登陆,以及判断你是谁,来给你响应,这时候问题就来了,怎么知道每次请求的谁呢,所以就出来了一个会话标识(session id),就是一个随机的字符串,每个人登陆的时候,服务器都会返回一个会话标识,这是再请求的时候,只要带上会话标识,服务器就知道请求的是谁。
3. 这样子每个人只要保存自己的session id就可以啦,服务器要保存所有人的session id!!!如果有成千上万的人访问服务器,那对服务器是巨大的开销,严重限制了服务器端的扩展能力,比如机器A跟机器B组成了服务器集群,那么访问了机器A,会话标识在机器A上,如果转到机器B,就不能访问了,也许会说,那复制呢,机器A搬到机器B,也有说统一把标识放在一个机器上,但是万一这个机器挂了呢,那体验就很差了。
4. 这个时候就有人想,用户自己保存自己的标识,就是Token,访问的时候带上这个Token,这个Token是用户id+签名,验证时,服务器只要相同的算法和服务器才知道的密钥进行签名,如果结果跟Token中的签名一样,那就可以证明是登陆过的用户。
这样一来,服务器不保存session id,只要生成Token,访问时,只要对Token进行判断,Token也是有有效期的,所以也要进行refreshToken的。
Token,Cookie,Session三者使用场景的区别?
Token主要是Web领域的身份认证,最常见的就是Web API这个功能:
- 单点登陆
- 同步两个平台的数据(基于单点登陆上)
日常生活中我们有很多的平台都可以通过自己的微信登陆,这就因为Token的存在,微信官方开放了登陆的API,平台只要调用此API就可以获得Token,之后的认证都是登陆的状态进行的。
Cookie就是饼干,它是服务器生产,永久保存在浏览器的数据,以kv的形式,你可以打开你的浏览器(这里以win10 edge为例),点击上方的三个点的按钮,再点击更多工具,再点击开发人员工具,再点击网络,此时内容选择文档,然后刷新页面,找Cookie即可。
Session是会话标识,是服务器用来判断正在会话的用户是谁,服务器生产的随机数,保存在服务器中,用户端也要进行保存,虽然能实现会话的共能,但对服务器的扩展能力限制,同时当服务器是两台机器组成以上的时候,会导致两台机器以上保存的session同步问题,会导致用户体验极差。
Token跟Session最大的区别就是Token服务端不用保存,同时是通过签名等技术实现的,Session因为是随机数,导致服务器要进行保存。
未经允许不得转载:app分发 » Token是什么?和session、cookie相比,使用场景有什么区别?