cookie和session摘录笔记

1. Cookie


Cookie是存储在客户端上的一小段数据,浏览器通过HTTP协议和服务器端进行Cookie交互。Cookie在远程浏览器端存储数据并以此跟踪和识别用户。
Cookie并不是某种语言(如PHP)实现的,而是某种语言通过对Cookie的间接操作,即发送HTTP指令,浏览器收到指令便操作Cookie并返回结果。


PHP对cookie的操作:
setcookie('name','hi',time()+3600);
Cookie的值设为false会让客户端尝试删除这个cookie,所以如果要在cookie上保存true或false则应该使用1或0。Cookie没有显示的删除函数,所以如果想删除Cookie,应该将Cookie的expire设置为过期时间。


每个域名下允许的cookie个数是有限制的,根据浏览器这个限制也不同。一个域名下的每个cookie限制以4KB键值对的形式存在。不要把Cookie当做客户端的存储器来用。
cookie存储在客户端,一种是保存在文件中,一种是保存在浏览器内存中。关闭浏览器,保存在内存中的cookie会随着浏览器的关闭而消失,但保存在硬盘上的不会,除非设置该cookie的expire为空,即随浏览器关闭而消失。


正常的cookie只能在一个应用中共享,即一个cooke只能有创建它的应用获得。实现cookie的跨域,即实现单点登录,最好的方式是使用P3P协议。
优化cookie的解决方案是使用本地存储localStorage。


2. Session

session是指用户在浏览某个网站时,从进入网站到浏览器关闭这段时间内的会话(session即会话)。

Session的实现可以有多种,如URL重写、cookie,通过在cookie中存储 sessionID实现session传递。PHP的session默认通过文件的形式存储放在本地硬盘的一个目录中,即存储在服务器端的Session文件,每个session一个文件,文件名为sesssionID。php.ini里session.save_path = "N;MODE;/path"设置session的保存路径。

如果没有禁用cookie,cookie在启动session会话时扮演的是存储sessionID和session生存期的角色。

对于访问量比较大的站点,用默认的session存储方式并不合适,较优的方式是使用database存取session。在大流量的站点中,session入库存在效率不高、占据数据库connection等问题。针对这种情况,可以使用redis、memcached等键值对数据存储方案实现高并发、大流量的session存储。

session并不会随着浏览器的关闭而消失,除非正常退出,显示调用unset删除session。session过期后,php会对其进行回收,但session的回收是被动的,为了保证过期的session能被正常回收,可以修改php.ini中的session.gc_divisor来提高回收率(太大了会增加负载)


cookie保存在客户端,session保存在服务端(sessionID保存在cookie里),但不是说sesssion比cookie更安全。cookie和session是绑定的,获得了cookie就相当于获得了session。客户端把劫持的cookie原封不动的传给服务器,服务器收到后原封不动的验证session,如果session存在则绑定成功。cookie确实有一些安全问题,但即使突破前端,还有后端的安全保障。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值