欢迎来到天天文库
浏览记录
ID:30790538
大小:60.00 KB
页数:6页
时间:2019-01-03
《php重写session机制-编程小技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、PHP重写session机制众所周知,session在web应用屮占有举足轻重的地位。而且,在很多情况下我们需要改变session的存储位置。当然/,改变session存储的位置可以在php.ini文件中直接修改。但是,这需要我们对服务器有足够的权限。可是事实却是在很多时候我们并没有权限去操作php.ini文件的权限。这时需要我们通过PIIP提供的scssion_sct_savc_handlcr()函数来重写sessiono针对这一情况,PHP5>5.4和php7支持SessionHandlerlnterface接口。SessionHandlerlnterfa
2、ce{/*方法*/abstractpublicboolclose(void)abstractpublicbooldestroy(string$session_id)abstractpublicboolgc(intSmaxlifetime)abstractpublicboolopen(string$save_path,string$name)abstractpublicstringread(string$session_id)abstractpublicboolwrite(string$session_id,string$session_data)我们需要做的就
3、是实现这个接口中的所冇的方法。然后通过session_set_save_handler()函数來使方法牛效。注:本文中的例子是将session存到redis中。对于PHP如何操redis,大家可以参考《PHP操作Redis的两种方式》。下面我们來分别介绍这些函数的实现方法。open函数abstractpublicboolSessionHandlerlnterface::open(string$save_path,string$name){}璽新初始化现冇的session,抑或是创建一个session。该函数在session_start()函数执彳亍的时候被调用
4、。$save_path这个参数对应的就是php.ini屮的session.save_path选项。这个选项设置的值就是$savc_path的值。默认情况下,php.ini中session.savc_path这个选项是被注释的,所以$savc_path的值为空。举个例子:session.save_path设置为/tmp,则$save_path的值为/tmp。Sname这个参数对应的就是php.ini屮的session.name选项。默认悄况卜session.name设置为PHPSESSIDo所以说$name参数值为PHPSESS1D。我在实现这个函数的时候没有做
5、其他的处理(因为我想将session存到redis屮),只是连接了redis数据库。publicfunctionopen($save_path,$name){/**首先连接服务器*/$this->parseConnect();returntrue;}close函数abstractpublicboolSessionHandlerlnterface::close(){}关闭为前的sessiono该函数在为关闭session的时候被白动触发,或者在程序屮调丿IJsessionwritc_close()函数是触发close。函数。在实现该函数时没有做什么特殊的处理pu
6、blicfunctionclose(){returntrue;read函数abstractpublicboolSessionHandlerlnterface::read($session_id){)读取session数据。当调用session_start()函数的时候会触发read()函数。当然该前数的触发是在openZ后的。$session_id该参数就是对应的由客户端传过来的sessionldo所有的操作都需要根据这个sessionld来进行。publicfunctionread($session_id){/**根据sessionld构造键名*/$key=
7、$this->prefix/:'.$session〃读取当前scssionid下的data数据$res=$this->handle->hGet($key,'data');〃读取完成以后更新时间,说明已经操作过session$this->handle->hSet($key/last_time',time());return$rcs;}write函数abstractpublicboolSessionHandlerlnterface::write(Ssession_id,$session_data){}该函数是将session的数据写到相应的位置左。当操作$_SES
8、SION来序列化数据的时候该函数被触发
此文档下载收益归作者所有