一、存储位置不同
Cookie的数据信息存放在客户端的浏览器上。
Session的数据信息存放在服务器。
二、存储容量不同
单个Cookie保存的数据≤4KB,一个站点最多保存20个Cookie。
对于Session并没有上限,但是出于对服务器端的性能考虑,Session内不要存放过多的东西,并且要设置Session删除机制。
三、存取方式的不同
- Cookie中只能保管ASCII字符串,需要通过编码的方式存取Unicode字符或者二进制数据。运用Cookie难以实现存储略复杂的信息。
- Session中能够存取任何类型的数据,包括且不限于String、Integer、List、Map等。
四、隐私策略的不同
Cookie对客户端是可见的,别有用心的人可以分析存放在本地的Cookie并进行Cookie欺骗,所以它不是很安全。
-
Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
总之,选择Cookie,比较好的方法就是,敏感信息,如账号密码等,尽量不要写到Cookie中。可以将Cookie信息加密,提交到服务器后再进行解密。存储在本地的Cookie就需要自行加密了。
五、有效期的不同
- Cookie的有效期可以进行设置,在其属性处进行设置,所以理论上Cookie是可以长期有效的。
- Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默认为-1,只需要关闭该Session窗口就会失效,因而Session不能长期有效。就算不依赖于Cookie,运用URL地址重写也不能完成,因为假如设置Session的超时时间过长,服务器累计的Session就有越多,越容易导致内存的溢出。
六、服务器压力的不同
- Session保存在服务器端的,每个用户都会产生一个Session。假如并发访问的用户非常多,那意味着会产生非常多的Session,届时服务器会耗费大量的内存保管这些Session。
- Cookie保存在客户端,不占用服务器资源。对于并发用户非常多的网站,Cookie是很好的选择。
七、浏览器支持不同
-
假如客户端浏览器不支持Cookie
- Cookie是需要客户端浏览器支持的。假如客户端禁用了Cookie,或者不支持Cookie,那么会话跟踪会失效。关于WAP上的应用,常规的Cookie就派不上用场了。
- 运用Session需要使用URL地址重写的方式。一切用到Session程序的URL都要进行URL地址重写,否则Session会话跟踪还会失效。关于WAP应用来说,目前,Session + URL地址重写或许是它唯一的选择。
-
假如客户端支持Cookie
- Cookie既能够设置为本浏览器窗口及子窗口内有效(把过期时间设置为-1),也能够设置为一切窗口内有效(把过期时间设置为某个大于0的整数)。
- Session只能在本窗口以及其子窗口内有效。假如两个浏览器窗口互不相干,它们将运用两个不同的Session。(IE8下不同窗口Session相干)
八、跨域支持上的不同
- Cookie支持跨域名访问,例如,将domain属性设置为“.xiaobai.com”,那么以“.xiaobai.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,比如,Google、Baidu等。
- Session则不会支持跨域名访问。Session仅在它所在的域名内有效。