Home >Backend Development >PHP Tutorial >Session_set_save_handler text mode implementation_PHP tutorial
1. Construct a session abstract class and implement the basic functions necessary for the Session_set_save_hanlder function
de6f585afeb158b3891b1323298c1f14 View Code2. Write a specific method implementation class for txt text mode
4d42a414f029b83c200bff9399518023save_path = 'D:session'; if(!is_dir($this->save_path)){ if(!mkdir($this->save_path)){ return false; }; } $this->gc();//Enable recycling return true; } /* close::Close storage mode handle */ final public function close(){ return true; } /* read:: Query the corresponding value according to the key, typical key-value pair */ final public function read($key){ $this->set(__function__,$key); $data = @fread($this->save_hand,filesize($this ->file_path)); if(empty($data) || $data == ''){ return ''; }return $data; } /* write::write session */ final public function write($key,$value){ $this->set(__function__,$key); return @fwrite($this->save_hand,$value); } /* destory:: Destroy the session of a certain key */ final public function destroy($key){ $this->set(__function__,$key); return @unlink($this->file_path); } /* gc:: Recycling mechanism, clear session data that has expired for the specified time (minutes) */ final public function gc($min = 10){ $hand = @opendir($this->save_path);//Open folder while($file = @readdir($hand)){//Traverse the file Clip if(is_file($this->save_path.'/'.$file)){//If it is a file, exclude.||.. $fileatime = fileatime($this->save_path.'/'.$file);//Get the last modification time of the file if(((time() - $fileatime) / 60) > $min){//If the time difference is greater than $min minutes unlink($this->save_path.'/'.$file);//Perform file cleaning function } }} return true; } ################################################################################# /* MAGIC __SET */ final public function __set($key,$value){ $this->$key = $value; return true; } /* 获取存储句柄 */ final private function set($mode = 'read',$key){ $this->file_path = $this->save_path.'/'.$this->save_prefix.$key;//设置文件路径 if($mode != 'read' && $mode != 'write'){return false;}; $mode = $mode == 'write' ? 'w' : 'r';//读或写 $this->save_hand = @fopen($this->file_path,$mode); } /* start::开启session方法重写 */ final public function start(){ @session_set_save_handler(array($this,'open'),array($this,'close'),array($this,'read'),array($this,'write'),array($this,'destory'),array($this,'gc')); ob_start(); session_start(); ob_end_flush(); } } ?> View Code3、引入session.php,实现工厂模式最后一步
<?<span>php </span><span>/*</span><span> 实现session利用文件形式或者数据库等其它形式进行存储操作 * author:Libin * Data:2014-06-24 * 工厂模式 </span><span>*/</span> <span>class</span><span> _session_start { </span><span>/*</span><span> 构造函数 </span><span>*/</span> <span>static</span> <span>public</span> <span>function</span> __start(<span>$mode</span> = 'txt'<span>){ </span><span>require_once</span>('session.class.php');<span>//</span><span>加载抽象方法</span> <span>if</span>(!<span>require_once</span>('function/'.<span>$mode</span>.'.php'<span>)){ </span><span>return</span> <span>false</span><span>; }</span><span>else</span><span>{ </span><span>$session_handle</span> = 'session_'.<span>$mode</span><span>; </span><span>$handler</span> = <span>new</span> <span>$session_handle</span><span>(); </span><span>$handler</span>-><span>start(); } } } _session_start</span>::__start('txt');<span>//</span><span>重写session函数开始</span> ?>
PS::明儿个编写mysql实现此功能,今天就到此为止啦啦啦!