------------------------------

PHP session自定义处理,将session保存到数据库中!!!


session.gc_probability = 1        //默认是1 ,越大越好

session.gc_divisor = 100 //默认是100,越小越好

// 默认是一百次请求调用一次gc 。session.gc_probability相当于分子,session.gc_divisor相当于分母。如果想每次都调用gc 两个改成一样就可以了

session.gc_maxlifetime = 30 // session生存时间

<?php
function session_open($session_path, $session_name)
{
mysql_connect('localhost', 'root', 'root');
mysql_select_db('demo');
mysql_query("SET NAMES utf8");
}

function session_close()
{
return TRUE;
}

function session_read($SID)
{
$query = "SELECT value FROM session where SID= '$SID' AND expiration >".time();
$result = mysql_query($query);
if(mysql_num_rows($result))
{
$row = mysql_fetch_assoc($result);
$value = $row['value'];
return $value;
}else
{
return FALSE;
}
}

function session_write($SID, $value)
{
$lifetime = get_cfg_var("session.gc_maxlifetime");
$expiration = time() + $lifetime;
$query = "INSERT INTO session VALUES('$SID', '$expiration', '$value')";
$result = mysql_query($query);

if (!$result)
{
$query = "UPDATE session SET expiration = '$expiration', value = '$value' WHERE SID = '$SID' AND expiration >".time();
$result = mysql_query($query);
}
}

function sessionDestroy($SID)
{
$query = "DELETE FROM session WHERE SID = '$SID'";
$result = mysql_query($query);
}

function session_gc()
{
$query = "DELETE FROM session WHERE expiration <".time();
$result = mysql_query($query);
echo mysql_affected_rows();
}

session_set_save_handler("session_open", "session_close", "session_read", "session_write", "sessionDestroy", "session_gc");
session_start();

?>