Maison >php教程 >php手册 >Session_set_save_handler 之 文本模式实现

Session_set_save_handler 之 文本模式实现

WBOY
WBOYoriginal
2016-06-13 09:33:031080parcourir

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 Code

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(); } } ?> View Code

3、引入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实现此功能,今天就到此为止啦啦啦!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn