create table session (
session_id int(4) default '0' not null auto_increment,
user_id int(4) default '0',
user_ip varchar(15) not null,
session varchar(32) not null,
last_action datetime not null,
primary key(session_id)
);
class classSession extends classSQL
{
/**************************************
author: shadow
email: shadow@heartstringz.net
web:
www.webdevcn.com www.heartstringz.net**************************************/
function create($length=32)
{
//make rand time
srand(time());
//Set pool of possible characters
$Pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$Pool .= "abcdefghijklmnopqrstuvwxyz";
$Pool .= "1234567890";
for($index = 0; $index < $length; $index++) {
$sid .= substr($Pool,(rand()%(strlen($Pool))), 1);
//echo "$sid
";
}
return($sid);
}
function clean($min=20)
{
global $db;
$sql = "UPDATE session SET session='' WHERE last_action < '";
$sql.= date("Y-m-d H:i:s", (time()-60 * $min));
$sql.= "'";
$res = $db->update($sql);
return $res;
}
function insert_trace($SID)
{
global $db,$REMOTE_ADDR;
if(!$SID) return false;
$now = date("Y-m-d H:i:s");
$sql = "INSERT INTO session (user_id,session,user_ip,last_action) valueS (0,'$SID','$REMOTE_ADDR','$now')";
$res = $db->insert($sql);
return $res;
}
function check_trace($SID)
{
global $db,$REMOTE_ADDR;
if(!$SID) return false;
$sql = "SELECT COUNT(*) AS total FROM session WHERE session='$SID' AND user_ip='$REMOTE_ADDR'";
$res = $db->select($sql);
list($k,$v) = each($res);
return $v[total];
}
function update_trace($SID)
{
global $db,$REMOTE_ADDR;
if(!$SID) return false;
$now = date("Y-m-d H:i:s");
$sql = "UPDATE session SET last_action='$now' WHERE session='$SID' AND user_ip='$REMOTE_ADDR'";
$res = $db->update($sql);
return $res;
}
}
?>
使用的时候:
//start session object, procceed session "SID"
$classSession = new classSession();
$classSession->clean();
if(!$SID)
{
$SID = $classSession->create();
$classSession->insert_trace($SID);
}
else
{
if($classSession->check_trace($SID))
{
$classSession->update_trace($SID);
}
else
{
$SID = $classSession->create();
$classSession->insert_trace($SID);
}
}
?>