1,数据类型和数据量不同
- cookie中只能保管ASCII字符串,cookie存储的数量也有限制,只能存储几十个,不超过4k(4096左右的字符),(很多浏览器一个站点最多保存20个cookie)
- Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型
- Token也没有存储的数据量的限制,支持多种数据类型
2,安全性
- cookie存储在客户端阅读器中,对客户端可见,客户端的一些程序可能还会窥探,修改cookie中的内容
- Session存储在服务器中,对客户端是透明的,可以保护用户隐私不被泄露,是一种认证手段
- Token存储在客户端,有认证和授权两种手段,相比于session更加安全
3,有效期不同
- cookie长期有效,但是也可以设置cookie时间使cookie过期
- Session很容易失效,在用户访问结束后会自动消失,如果超时也会消失.(用完需要关闭,服务器累积的session过多,容易导致内存溢出)
- Token短期有效,但可以通过刷新得到新的token
4,服务器压力不同
- cookie对服务器压力小,session可能需要记录千百万用户的信息,对服务器的存储压力很大,会影响服务器性能
- 如果session内容过于复杂,当大量客户访问服务器还可能会导致内存溢出
- Token对服务器没有压力,服务器不需要记录任何东西,每次都是一个无状态的请求,每次都是通过解密来验证是否合法
5,跨域
(1)cookie不支持跨域访问
(2)Token支持跨域访问
6,其它
session一般是寄生在cookie下的,当cookie被禁止,session也被禁止,当然可以通过url重写来摆脱cookie