大至思路是这样的:
1、建立一个在线用户表,应该有用户名,最后访问服务器时间等字段
2、用户打开登录网页时,检查在上表中有没有该用户的在线记录,如果没有记录到上表中。(最好能再检查一下有没有断线的用户,根据是:用户如果在规定时间内都没有动静了,就可以认为已经不在线了)
3、用户有刷新网页,或新开网页时,更新最后访问时间。
4、在关键页面的unload事件中注消用户,即从在线用户表中删除该用户的记录。5、至于该表记录的显示就不用多说了吧?

解决方案 »

  1.   

    能否详细说明一下unload的用法,
    我试过像是有点问题.
    还有这关键页面是一页还是多页?
    如果用户刷新或历史后退或在地址中打入其他地址会有什么影响?
      

  2.   

    以下是我从一个聊天室程序里摘出来的:
    主页面是一个框架,在主页面里有一个chatunload函数,这个函数由input.php调用的。
    摘自main.php
      <frameset cols="62,14" border="0" frameborder="0"> 
        <frameset rows="*,85" border="0"> 
          <frame name="main" src="zhong.php?name=<?php echo $name; ?>&room=<? echo $room; ?>" marginwidth="0" marginheight="0"noresize>
          <frame name="input" src="input.php?name=<?php echo $name; ?>&room=<? echo $room; ?>&p=<? echo $pass; ?>&s1ex=<? echo $s1ex; ?>" marginwidth="0" scrolling="no" marginheight="0"noresize>
        </frameset>
        <frameset rows="*,85" border="0" frameborder="0"> 
          <frame name="online" src="online.php?name=<?php echo $name; ?>&room=<? echo $room; ?>&roomname=<? echo $roomname;?>" marginwidth="0" marginheight="0" noresize scrolling="auto">
          <frame name="system" src="system.php?name=<?php echo $name; ?>&room=<? echo $room; ?>" marginwidth="0" marginheight="0" noresize scrolling="auto">
        </frameset>
      </frameset>
    </frameset><script>
    function ChatUnload()
    {
    window.open('logout.php?action=quit&&name=<? print($name); ?>&&room=<? print($room); ?>&&point=<? print($point); ?>','close','menubar=0,toolbar=0,location=no,status=no,directories=0,scrollbars=0,resizable=no,top=6000 ,left=800,width=20,height=5');
    }
    </script>
    下面是在input.php的unload事件中调用ChatUnload函数的方法:
    <body onunload="parent.ChatUnload()" >
    根据你的实际情况做些改动应该就可以用了
      

  3.   

    <?
    ////////////////////////////////////////
    //           在线人数统计 line.inc
    //   $jiangetime  间隔时间
    //   $datetime    当前时间
    //   $num         在线人数
    //   输入:无
    //  输出:$num
    ////////////////////////////////////////
    function sumOnline()
    {
    $jiangetime=600;//规定在线时间
    $datetime = time();
    $sult = "DELETE FROM ccol WHERE (".$datetime."-dtstamp)>".$jiangetime;
    $result = sybase_query($sult);
    if (!$result)
    {
    echo "删除有误!";
    }
    $sult = "SELECT * FROM ccol WHERE ip='".$REMOTE_ADDR."'"; 
    $result = sybase_query($sult);
    if ($result)
    {
    if(sybase_num_rows($result)==1)
    {
    $sult = "UPDATE ccol SET dtstamp=".$datetime.", uri='".$REQUEST_URI."' WHERE ip='".$REMOTE_ADDR."'";
    $result = sybase_query($sult);
    if (!$result)
    {
    echo "重写有误!";
    }

    else

    echo $datetime;
    $sult = "INSERT INTO ccol (ip,dtstamp,uri)VALUES ('".$REMOTE_ADDR."', ".$datetime.", '".$REQUEST_URI."')";
    $result = sybase_query($sult);
    if (!$result)
    {
    echo "插入数据!";
    }
    }
    } $sult = "SELECT * FROM ccol WHERE (".$datetime."-dtstamp)<=".$jiangetime;
    $result = sybase_query($sult);
    if ($result)
    {
    $num = sybase_num_rows($result);
    sybase_free_result($result);
    }
    else
    $num = 0;
    return  $num;
    }
    ?>