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实现此功能,今天就到此为止啦啦啦!
http://www.bkjia.com/PHPjc/817467.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/817467.htmlTechArticle1、构建session抽象类,实现Session_set_save_hanlder函数必须的基础函数 ? php /* 实现session利用文件形式或者数据库等其它形式进行存储操作 * au...