1.为什么会有cookie和session
这是因为http协议的无状态性,如用户访问
www.jd.com/a.html
www.jd.com/b.html
这两个页面是没有任何关系的,那怎么标识这两次是一个人访问的呢,cookie和session就应运而生了。
早期的web应用,使用cookie较多,使用cookie可以减轻服务器的负担;由于cookie的缺点也较多,所以目前很少单纯用cookie ,基本都是cookie+session。
重要的数据放session,非机密的东西可以考虑放cookie。
2. cookie和session区别
cookie存储在客户端,session存储在服务器端,cookie的产生是在服务端产生的,
存储大小有限制,单个cookie保存的数据不能超过4kb,个数和具体浏览器有关,如Firefox限制50个 ,另外server端对header的大小也有限制,不能无限扩展。session存储大小无限制
3.二者关系
二者是有关联的,浏览器禁用cookie,session也会无法使用,这是因为session_id需要通过cookie传递。
如图,我禁用了www.jd.com的cookie,首页和订单页
首页登录状态没了,其他子域名显示正常。
二者是如何关联的呢,以php为例,服务器session开启后,会向浏览器发送一个PHPSESSID的cookie,浏览器后续的访问都会带上这个cookie。服务器根据这个cookie确认身份。
当然,如果浏览器禁用cookie,PHPSESSID还可以通过url传递,服务器接收到PHPSESSID的值,还是可以取到session信息,但是目前看各大网站都没有处理cookie禁用的情况,可能也没必要考虑吧。
最后说说token的应用
随着互联网应用的规模越来越大,分布式和大规模集群的应用,使用cookie和session的局限性也越来越大,限制了系统的扩展性,所以现在的系统越来越多使用token来替换了传统的cookie和session,如常用的jwt。