主题:  解决用户在线判断的类

5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:400
#12001/11/30 22:24:38
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);
}
}
?>

编辑历史:[这消息被felixding编辑过(编辑时间2001-11-30 22:25:13)]
[这消息被felixding编辑过(编辑时间2001-11-30 22:25:46)]