这里用到了session_set_save_handler()函数,其参数学六个自定义处理Session存取的函数,代码如下(TeamXdb是一个数据库类)
<?php
function sess_open($save_path, $session_name)
{
global $TeamXdb;
if (!$sessid = session_id())
{
return false;
}
$TeamXdb->sql_query("DELETE FROM teamx_session WHERE sesslast < DATE_SUB(NOW(),INTERVAL 30 MINUTE)");
if (($resultSess = $TeamXdb->sql_query("SELECT sessid FROM teamx_session WHERE sessid = '" . $sessid . "'")) && ($rowSess = $TeamXdb->sql_fetchrow($resultse)))
{
$TeamXdb->sql_freeresult($resultSess);
$TeamXdb->sql_query("UPDATE teamx_session SET sesslast = NOW() WHERE sessid = '" . $sessid . "'");
}
else
{
$TeamXdb->sql_query("INSERT INTO teamx_session(sessid, sessname, sesslast) VALUES('" . $sessid . "', '" . $_SERVER['REMOTE_ADDR'] . "', NOW())");
}
return true;
}
function sess_close()
{
return true;
}
function sess_read($id)
{
global $TeamXdb;
if (!($result = $TeamXdb->sql_query("SELECT sessid FROM teamx_session WHERE sessid = '" . $id . "'")))
{
return false;
}
$TeamXdb->sql_freeresult($result);
$resultSess = $TeamXdb->sql_query("SELECT sessdata FROM teamx_session WHERE sessid = '" . $id . "'");
$rowSess = $TeamXdb->sql_fetchrow($resultSess);
$sess_data = $rowSess['sessdata'];
$TeamXdb->sql_freeresult($resultSess);
return $sess_data;
}
function sess_write($id, $sess_data)
{
global $TeamXdb;
if (!($result = $TeamXdb->sql_query("SELECT sessid FROM teamx_session WHERE sessid = '" . $id . "'")))
{
return false;
}
$TeamXdb->sql_freeresult($result);
if ($TeamXdb->sql_query("UPDATE teamx_session SET sessdata = '" . $sess_data . "', sesslast = NOW() WHERE sessid = '" . $id . "'"))
{
return true;
}
else
{
return false;
}
}
function sess_destroy($id)
{
global $TeamXdb;
$TeamXdb->sql_query("DELETE FROM teamx_session WHERE sessid = '" . $id . "'");
}
function sess_gc($maxlifetime)
{
return true;
}
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>