【PHP基础知识】——cookie与session的区别

来源:互联网 发布:python 写shell脚本 编辑:程序博客网 时间:2024/06/14 00:35

一、前言

前面写了两篇关于cookie和session的文章做了详解和归纳,这里很多人会遇到的一个问题就是:session和cookie到底有哪些区别?同样地,我们也可以罗列一下两者的区别并做一个总结。


二、cookie和session的区别

1、大小和个数的区别
(1)cookie的个数以往一直限制在20个,但是现今许多浏览器都已经支持了超过20个,像IE都已经支持一个域名50个cookie了;
cookie的总大小也会根据浏览器的不同而有不同限制,大多数限制在4K,超过限制的cookie会被浏览器忽略;
(2)session没有个数和大小的限制,理论上相当于服务器的内存负载,一般来说session都是序列化后保存在服务器的某个路径上的,如果是php,保存路径应该是php.ini中的session.save_path路径,并读取在$_SESSION中,故实际大小应该是php.ini中配置的memory_limit的值

2、存取方式的区别
(1)Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需要先进行编码;
(2)Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等,甚至是对象。

3、隐私策略的区别
(1)Cookie存储在客户端中,对用户是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容(当然可以选择加密cookie内容以保证信息安全);
(2)Session存储在服务器上,除了SESSION ID之外其余内容对用户是不可见的,不存在敏感信息泄露的风险。

4、有效期的区别
(1)cookie适合长时间保留生效,只需要设置Cookie的过期时间属性为一个很大很大的数字;
(2)Session依赖于Cookie来传输ID,而该Cookie的过期时间默许为–1,只需关闭了浏览器该Session就会失效(没有关闭默认失效时间已经被设置为20分钟),而且假如设置Session的超时时间过长,服务器的负载就越重,故URL重写的方式长时间保留SESSION也是不可行的,所以session不适合作长时间保存

5、浏览器支持的区别
对于WAF应用(防火墙),cookie会失去作用,Session+URL地址重写或许是它唯一的选择;
在浏览器上,假如客户端支持Cookie,则Cookie既能够设为本浏览器窗口以及子窗口内有效(把过期时间设为–1),也能够设为一切浏览器窗口内有效(把过期时间设为某个大于0的整数);但Session只能在本阅读器窗口以及其子窗口内有效。假如两个浏览器窗口互不相干,它们将运用两个不同的Session。

6、跨域支持上的不同
(1)Cookie支持跨域名访问,例如将domain属性设置为“xxx.com”,则以“xxx.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中;
(2)Session则不会支持跨域名访问。Session仅在它所在的域名内有效。

参考文章:http://codcodog.github.io/2016/07/26/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3session%E5%92%8Ccookie/
原创粉丝点击