什么是token token和session的区别

万维网(www:World Wide Web)的诞生起源自1990年12月15日蒂姆·伯纳斯·李利用网际网络实现了超文本传输协议(http:Hyper Text Transfer Protocol)客户端和服务器的第一次通讯 。

什么是token token和session的区别

文章插图
http是运行在TCP之上的一种简单的请求、响应协议,所谓的协议就是形成了固有的套路 , 客户端指定向服务器发送什么信息,然后服务器就会做出与之对应的回应 。
什么是token token和session的区别

文章插图
举个例子:GET、POST、HEAD等方法中,post一般用于客户端提交表单数据给服务器,或者上次文件给服务器,而head、get则是获取URL中指定的资源 。在使用get时请求的参数、值需要附加在URI(URI时URL的一种扩张,在HTTP协议中URI一般都是指URL)后面,利用"?"将资源的URI和请求参数、值隔离开来,参数、值之间使用“&”隔开 。
什么是token token和session的区别

文章插图
万维网的发展历史要彻底理解session、cookie、token之间的区别,就不得不去翻开过去尘封的历史 。仅30年web发生了翻天覆地的变化 。
什么是token token和session的区别

文章插图
早期的web其实是非常简陋的,仅仅实现的是基本的文本浏览而已 。用寒酸的表格来做框架定位还仅仅是后话 。仅仅只是文本和文本包含的超链接而已,服务器仅仅只是机械式的请求 , 然后响应,并不需要记录谁在某一个时间段里浏览了什么内容,也不需要记住是谁发的HTTP请求 。
什么是token token和session的区别

文章插图
慢慢的网站就需要登录、留言、发表内容、内容管理、在线购物等等交互,这时web就需要引入会话管理机制,记录谁登录了系统,谁又将商品放入了购物车中等等 。由于早期的web本身就是无状态请求,于是有人就想出了一个办法,给每个访问的人发一个不会重复的号码牌,也就是session id(会话标识) 。由于session id是服务器发给每个接收端的一串随机字符串 , 这样就能够区分谁是谁了 。
什么是token token和session的区别

文章插图
session id看似解决web无状态请求的问题,但也造成了不小的困扰 。比如在负载均衡组成的集群中,当我们通过机器A登录 , session id就会保持在机器A上 。但如果下次请求转发到了机器B,就需要将机器A的session id复制到机器B上 , 所以总是在session复制、粘贴的过程,如果保存了session的机器挂了新的问题接着又产生了 。
什么是token token和session的区别

文章插图
除此之外每个人的设备确实是保存了属于自己的session id,但服务器却要保存所有的session id , 这可不一定是几个几十个了,二十成千上万 , 甚至几十、上百万个 。
什么是token token和session的区别

文章插图
session其实也特别不安全,如果有人伪造了你的session id , 也就意味着他可以为所欲为了 。可以通过cookie的方式来保存session id,但cookie的区别在于其主要内容包括了名字、值、过期时间、路径、域等信息 , cookie可以实现类似于访问者离开店铺或者关闭浏览器,再打开店铺就能马上回复购物车的功能 。但cookie一旦过期就会被清理,当访问者再次打开网站时又会重新分配cookie 。
什么是token token和session的区别

文章插图
这么看来session id和cookie在本质上并没有完全的区别,别人想伪造很容易伪造 。于是token就出现了 , 比如用HMAC-SHA256算法加上一个密钥来对数据进行签名 , 那么别人不知道密钥,那么就没有办法伪造了,签名和数据组合在一起就是token了 。