阅读前提:HTTP 是一个无状态协议,所以客户端每次发出请求时,下一次请求无法得知上一次请求所包含的状态数据。
在九几年时候的还没有成熟的互联网,浏览器只能查看文件,连图片都看不了,功能非常简单。为了把服务器的更多信息发到客户端,兴起了http,但是客户端每次访问都是全新的请求,服务端不存。
后来零几年随着交互式网站比如在线购物网站的兴起,需要记住浏览器一个用户的多个动作,就是会话(session),比如登录网站、加到购物车,购买、退出。那就在请求的时候拼上用户的唯一ID吧,所以就把 session id 拼到了访问路径,类似这样:“XXX?sessionid=123456”。
每次访问的session信息都是不同的,网站一火起来,服务端就炸了。海量数据还无法记录一个用户多次登录的购买历史,就产生了保存一个用户许多信息的需求,这样一个用户每次登录就会获取到同样信息,浏览器就把这些信息当作cookie,存到浏览器本地里。这样每次交互都把cookie放到请求头里发给服务端。
说到现在,cookie其实就是浏览器存储用户信息的工具。
然而在这些操作里,token在哪呢?有什么用呢?
每次拿到sessionid,都可以对服务的增删改查是不安全的,就有了校验的需求,token是用来做校验,选一个密钥自己知道然后拼成字符串加密一下,请求把token带到服务端时再按照方式解密。
附session、cookie、token内部结构: