其实实现你的要求方法很多,记录下在线用户的名字到数据库或者文件中,然后比较就可以了.
下面的程序代码是我的网站里用的,在每个PAGE的开始执行,把当前用户名(记录在COOKIE中),与文件ONLINE.DAT中的每行比较,如果存在就只更新访问时间,如果不存在就添加一个新行,而且每次调用都把超过5分钟没有访问的用户从文件中删除.
下面代码需要你改一下才能用,有些是和我的系统相关.
//record online user
function onlineuser()
{
global $REMOTE_ADDR, $REQUEST_URI;
$datafile = 'online.dat';
$onlineTime = 300;
$user3 = explode(":", base64_decode($GLOBALS['user']));
if (!isset($user3)) return;
$timestamp = time();
$dat = file($datafile);
$count = count($dat);
$onlineCount = 1;
$insertMe = true;
$totaluser = 0;
for($i = 0;
$i < $count;
$i++) {
$dat[$i] = rtrim($dat[$i]);
list($userid,$ipadd, $requestUri, $lastRequest, $begin
date) = explode('|', $dat[$i]);
if($ipadd == $REMOTE_ADDR &&
$user3[1]==$userid) {
$dat[$i] = $userid.'|'.$ipadd.'|'.$REQUEST_URI.'|'.$timestamp.'|'.$begin
date."/n";
$insertMe = false;
} else
{
if($lastRequest < ($timestamp - $onlineTime)) {
$dat[$i] = '';
$ibx = @ibase_prepare("UPDATE USERLOG SET END_DATE='NOW' WHERE LOGID = (SELECT MAX(LOGID) FROM USERLOG WHERE USERID='$userid')");
@ibase_execute($ibx);
} else
{
$dat[$i] .= "/n";
$onlineCount++;
}
if ($userid != '') $totaluser += 1;
}
}
$totaluser += 1;
$newDat = join('', $dat);
if($insertMe) {
$newDat .= $user3[1].'|'.$REMOTE_ADDR.'|'.$REQUEST_URI.'|'.$timestamp.'|'.$timestamp."/n";
}
$fp = fopen($datafile, 'w');
fwrite($fp, $newDat);
fclose($fp);
return $totaluser;
}
$totaluser = onlineuser();