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(); } ?>
2、编写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(); } } ?>
3、引入session.php,实现工厂模式最后一步
<?php /* 实现session利用文件形式或者数据库等其它形式进行存储操作 * author:Libin * Data:2014-06-24 * 工厂模式 */ class _session_start { /* 构造函数 */ static public function __start($mode = 'txt'){ require_once('session.class.php');//加载抽象方法 if(!require_once('function/'.$mode.'.php')){ return false; }else{ $session_handle = 'session_'.$mode; $handler = new $session_handle(); $handler->start(); } } } _session_start::__start('txt');//重写session函数开始 ?>
PS::明儿个编写mysql实现此功能,今天就到此为止啦啦啦!
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。