PHP的问题,PHP如何实现限制用户登录数目???--急!急!急!急!急!500分(300分)

  • 主题发起人 WebExplorer
  • 开始时间
W

WebExplorer

Unregistered / Unconfirmed
GUEST, unregistred user!
以前我在JSP使用application和session的组合很容易实现在线用户数的统计,以及现在用户登录的数量,在网上查了一下,ASP利用onstart,onend,application,session也很容易实现.
PHP呢,我找遍了网上的资料也没有找到答案.
问题在于:
1,用户不正常登录的时候session不会自动给关闭.
2,没有相对应的application变量.
我现在要实现能够实时的统计在线登录的用户数和限制用户的数量,jsp,asp都很容易实现,但PHP我怎么也不知道如何实现.
 
其实实现你的要求方法很多,记录下在线用户的名字到数据库或者文件中,然后比较就可以了.
下面的程序代码是我的网站里用的,在每个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 &amp;&amp;
$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();
 
顶部