session_set_save_handler函数用法

session_set_save_handler   (PHP4   > =   4.0b4)

void   session_set_save_handler   (string   open,   string   close,   string   read,   string   write,   string   destroy,   string   gc)

这个函数可以定义用户级的session的保存函数(打开、关闭、写入等)。
比如,我们想把session保存在本地的一个数据库中时,本函数就很有用了。

!!!注意:使用本函数前,先要配置php.ini文件,session.save_hadler=user   ,否则,session_set_save_handler()不会生效。

此外,根据我的测试,你如果想让这样的session跨页面使用,还要在每一个用到session的脚本文件中加入你自定的函数及 session_set_save_handler,所以,最好的方法是做成一个单独的文件,在每一个要用到session的脚本中用include来包 含进来。

下面这个例子提供了一个最基本的session保存法,类似于默认的files方法。
如果你想用数据库来实现,这也是很容易做到的。

Example   1.   session_set_save_handler()   example

<?php

function   open   ($save_path,   $session_name)   {
global   $sess_save_path,   $sess_session_name;

$sess_save_path   =   $save_path;
$sess_session_name   =   $session_name;
return(true);
}

function   close()   {
return(true);
}

function   read   ($id)   {
global   $sess_save_path,   $sess_session_name;

$sess_file   =   “$sess_save_path/sess_$id “;
if   ($fp   =   @fopen($sess_file,   “r “))   {
$sess_data   =   fread($fp,   filesize($sess_file));
return($sess_data);
}   else   {
return( ” “);
}

}

function   write   ($id,   $sess_data)   {
global   $sess_save_path,   $sess_session_name;

$sess_file   =   “$sess_save_path/sess_$id “;
if   ($fp   =   @fopen($sess_file,   “w “))   {
return(fwrite($fp,   $sess_data));
}   else   {
return(false);
}

}

function   destroy   ($id)   {
global   $sess_save_path,   $sess_session_name;

$sess_file   =   “$sess_save_path/sess_$id “;
return(@unlink($sess_file));
}

/*********************************************
*   WARNING   –   You   will   need   to   implement   some   *
*   sort   of   garbage   collection   routine   here.   *
*********************************************/
function   gc   ($maxlifetime)   {
return   true;
}

session_set_save_handler   ( “open “,   “close “,   “read “,   “write “,   “destroy “,   “gc “);

session_start();

// proceed   to   use   sessions   normally
// 现在你就可以象往常一样地使用session了。

?>

 

小结:

session_set_save_handler(
“open “,   /*   session_start()调用   */
“close “,   /*   程序结束时调用   */
“read “,   /*   session_start()调用   */
“write “,   /*   程序结束时调用   */
“destroy “,   /*   session_destroy()调用   */
“gc ”   /*   操作系统gc进程调用   */
);
通知php使用自定义的session处理函数来操作session,而不使用php预置的方法