程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Session_set_save_handler 之 文本模式實現

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 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實現此功能,今天就到此為止啦啦啦!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved