Session
概念
- session从字面上讲,就是会话。这个就类似你和一个人交谈,你怎么知道当时和你交谈的是张三而不是李四呢?对方肯定有某种特征长相等,表明他是张三;
- session也是类似的道理,服务器要知道当前请求发给自己的是谁,为了做这种区分,服务器就是要给客户端分配不同的“身份标识”,然后客户端每次向服务器发送请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。
- 至于客户端怎么保存这个“身份标识”,可以有很多方式,对于浏览器客户端,大家都采用cookie的方式。
Cookie
概念
cookie由服务器生成,发送给浏览器,浏览器把cookie以KV形式存储倒某个目录下的文本文件中,下一次请求同一网站时会把该cookie发送给服务器。
Token
概念
- token也称作令牌,由uid+time+sign[+固定参数]
- token的认证方式类似于临时的证书签名,并且是一种服务端无状态的认证方式,非常适合于REST API的场景,所谓无状态就是服务端并不会保存身份认证的相关数据。
三者区别
- 存储位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上;
- 隐私策略不同:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑倒安全应当使用session;
- session会在一定时间内保存服务器上。当访问增多,就会比较占用你服务器的性能,考虑倒减轻服务器性能方面,应当使用cookie;
- Session是一种HTTP储存机制,为无状态的HTTP提供持久机制;
- Token就是令牌,比如你授权(登录)一个程序时,它就是个依据,判断你是否已经授权该软件;
- Session和Token并不矛盾,作为身份认证Token安全性比Session好,因为每一个请求都有签名还能防止监听以及重放攻击,而Session就必须依赖链路层来保障通讯安全了,如上所说,如果你需要实现由状态的会话,仍然可以增加Session来在服务端保存一些状态。