讲到cookie,session,token区别,那就先得说到无状态的http协议
什么是无状态的http协议
在很久之前,web基本用语文档的浏览,既然是浏览。那个作为服务器就无需关注它在某一个时间段浏览了什么文档,每次请求都是新的一个http协议,就是请求加响应
会话状态管理
随时交互式web的发展,例如购物,需要登录,将商品放入购物车等,就会遇到一个问题,就是需要管理会话,记录某人登录。也就是区别每一个人。于是cookie,session,token三种管理会话的方式就出来了
cookie
什么是cookie?
cookie是浏览器实现的一种数据存储功能 cookie 是一般是由服务器生成发给浏览器,浏览器一kv形式存储在本地文件夹,下一次请求带上cookie发送给服务器
HTML5提供了两种本地存储的方式 sessionStorage 和 localStorage
session
什么是session?
session从字面上讲,就是会话。服务器要对每个客户端身份进行区分,所以对其发放“身份标识”,每次客户端向服务端请求会带上这个“身份标识”。对于浏览器客户端,大家一般都采用cookie的方式。
客户端和服务端会话过程
存在问题
扩展性不好: 单机服务器是没问题的,要是遇到服务器集群,或者跨域服务器导向机构。这种情况就需要每台服务器都能读取到session。简单来说:一家公司有A,B两个网站,想要在A网站登录过之后访问B网站的时候不需要再次登录。这就涉及到单点登录的问题
解决方案
1. session复制。任何一个服务端发生改变是,改节点会吧这个session的所有内容序列化,广播给其他节点。
2.session共享。将session统一储存到一个地方。所有机器都访问这个地方的数据。
3.Nginx ip_hash 策略。通过nginx代理。每次请求按照ip的hash分配。
4.token。这种方式在服务端直接不存session了,所有数据保存在客户端。
token
过程
总结
Token和Session的区别
Session是一种HTTP储存机制, 为无状态的HTTP提供持久机制; Token就是令牌, 比如你授权(登录)一个程序时,它就是个依据,判断你是否已经授权该软件;
最后 cookie,session,Token没有绝对的好与坏之分,只要还是要结合实际的业务场景和需求来决定采用哪种方式来管理回话,当然也可以三种都用。