Heim >Backend-Entwicklung >PHP-Tutorial >Session_set_save_handler 之 文本模式实现_PHP教程
1、构建session抽象类,实现Session_set_save_hanlder函数必须的基础函数
php /* 实现session利用文件形式或者数据库等其它形式进行存储操作 * author:Libin * Data:2014-06-24 * 抽象顶层 */ abstract class session { /* open::设置存储路径 */ abstract public function open(); /* close::关闭存储模式句柄 */ abstract public function close(); /* read::根据key查询对应的value,典型的键值对 */ abstract public function read($key); /* write::写session */ abstract public function write($key,$value); /* destory::销毁某key的session */ abstract public function destory($key); /* gc::回收机制,清除过期指定时间(分钟)session数据 */ abstract public function gc($min = 0); /* start::开启session方法重写 */ abstract public function start(); } ?> View Code2、编写txt文本模式具体方法实现类
php /* 实现session利用文件形式或者数据库等其它形式进行存储操作 * author:Libin * Data:2014-06-24 * 文本(txt)实现方法 */ class session_txt extends session { /* 变量存储 */ private $save_path = '';//session保存路径 private $file_path = '';//session文件路径 private $save_name = '';//session命名 private $save_hand = null;//资源句柄 private $save_prefix = 'mysession_';//session前缀 /* open::设置存储路径 */ final public function open(){ $this->save_path = 'D:\session'; if(!is_dir($this->save_path)){ if(!mkdir($this->save_path)){ return false; }; } $this->gc();//启用回收机制 return true; } /* close::关闭存储模式句柄 */ final public function close(){ return true; } /* read::根据key查询对应的value,典型的键值对 */ 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::写session */ final public function write($key,$value){ $this->set(__function__,$key); return @fwrite($this->save_hand,$value); } /* destory::销毁某key的session */ final public function destory($key){ $this->set(__function__,$key); return @unlink($this->file_path); } /* gc::回收机制,清除过期指定时间(分钟)session数据 */ final public function gc($min = 10){ $hand = @opendir($this->save_path);//打开文件夹 while($file = @readdir($hand)){//遍历文件夹 if(is_file($this->save_path.'/'.$file)){//如果为文件,排除.||.. $fileatime = fileatime($this->save_path.'/'.$file);//获取文件最后修改时间 if(((time() - $fileatime) / 60) > $min){//如果时间相差大于$min分钟 unlink($this->save_path.'/'.$file);//执行文件清理功能 } } } 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实现此功能,今天就到此为止啦啦啦!