作者knives (大家都在补习阿)
看板Web_Design
标题[问题] 该怎麽用php+mysql作更精确的线上人数统计
时间Sat Oct 14 23:09:21 2006
我目前的作法是当使用者登入的时候,写入一个记录登入时间跟使用者的session变数
然後用php写入mysql资料库,再用mysql找出离现在一段固定时间登入的使用者当成线上
人数,可是问题来了,如果那个使用者一直在那个网站逛超过我预设的登入时间,那这
位使用者就变成显示不在线上,可是事实上他还是在阿,我有想过如果当使用者看网页的
时候也顺便修正mysql里的登入时间,可是我在登出的时候是选择找使用者跟登入时间做
AND运算在mysql资料库删除并用session_unregister()删除session,但如果想用这样的
话,最後mysql的登入时间早被我改过了,使用者登出後,mysql就找不到相对应的资料来
删,我找好久,都找不到能够直接修改session里面的变数值的方法,有没有人可以指点
一下,我也有想过登入时,多加一个以乱数当成惟一的登入session变数,可是我的疑问
会不会重覆到,如果资料库有两笔相同的登入值,那最後如果某个人按登出,岂不会多砍
一笔资料
下面是我的程式,connect.php只是单纯连资料库的东西
<?php
session_start();
include('./connect.php');
$MM_Username=$_SESSION['MM_Username'];
$sql="select `login_name`,`login_time` from whoisonline";
$result = mysql_query($sql);
$now_time=date("U");
//$sql1="UPDATE `whoisonline` SET `login_time` = '$now_time' WHERE
`login_name`='$MM_Username'";
//mysql_query($sql1);
echo "现在有";
while( list($a0,$a1)=mysql_fetch_row($result)){
if(($now_time-$a1)<30*60){
if($a0==$MM_Username){
echo $a0.",";
$i++;
}
else
{
echo "<a href=imEdit.php?u=$a0>$a0</a>,";
$i++;
}
}
}
echo "<p>";
echo "共'$i'人在线上";
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.128.194.77