php+mysql实现在线人数方法

php中并没有像asp中有global.asa文件,熟悉asp的人都知道,global.asa文件用来写在线人数是最好不过了。但是在php中怎样实现这种功能呢?
     核心的问题解决:就是异常掉线的问题,我们可以用最长没有刷新时间就算掉线来解决。我们用一个数据库来保存用户名和最后刷新时间。
    我们首先创建一个表:
create table online (user varchar(20),last_time bigint)
登录时我们要把我们加入在线用户:
实现代码:
$now_time=time();
mysql_query("insert into online (user,last_time) values ('".$session_userid."',".$now_time.")",$cn);

我们每刷新一下页面就先把超时的用户从数据库里面删除:
实现函数:
function delete_left_user()
{
global $cn;
$limit_time=200;//最长刷新时间
$now_time=time();
 mysql_query("delete from online where ".$now_time."-last_time>".$limit_time,$cn);
}

然后在数据库里面刷新我们最后刷新时间:
实现函数:
function update_last_time($user_name)
{
global $cn;
$now_time=time();
$result=mysql_query("select * from online where user='".$user_name."'",$cn);
if(!mysql_fetch_array($result))
return 0;//如果自已也超时的话,就返回假
else
mysql_query("update online set last_time=".$now_time." where user='".$user_name."'",$cn);
return 1;//成功
}

现在我们可以查到在线用户数了:
实现函数:
function online_num()
{
global $cn;
$result=mysql_query("select * from online",$cn);
return mysql_num_rows($result);//返回用户数
}


一些说明:$cn为已打开的数据库连接
$cn = mysql_connect("localhost","","test");
if(!mysql_select_db("mydb",$cn))
echo "open database error";