PHP头条
热点:

Session_set_save_handler 之 文本模式实现


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,实现工厂模式最后一步

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

www.phpzy.comtrue/php/10965.htmlTechArticleSession_set_save_handler 之 文本模式实现 1、构建session抽象类,实现Session_set_save_hanlder函数必须的基础函数 ? php /* 实现session利用文件形式或者数据库等其它形式进行存储操作 * author:Libin *...

相关文章

相关频道:

PHP之友评论

今天推荐