1

我对聊天室进行编程,但找不到显示在线和离线用户的方式。我将会话用于在线用户。当用户登录页面而不是空会话更新数据库和在线 1。现在如何知道用户从聊天中注销或关闭浏览器。我知道会话时间或捕获可以做到这一点,但我不能编写合适的代码。任何人都可以帮助我并将完整的代码放在这里吗?谢谢你的回答

在线展示:

session_start();
include("config.php");
connect();
$sql="SELECT `username` FROM `user` WHERE `online`=1";
$result=mysql_query($sql) or die (mysql_error());
if(mysql_num_rows($result)>0)
{
for ($i=0;$i<mysql_num_rows($result);$i++)
{
echo ('<b style="color:green;margin-left:10px;margin-top:10px;">'.mysql_result($result,$i,0).'</b><br>');
if($_SESSION['user']!=""
}
4

2 回答 2

1

您可以使用 php 脚本按计划运行,当用户不在现场时,该脚本将更新状态为离线。

为此,您有时应该将用户状态发送到服务器,例如通过 ajax,并将其存储在数据库中。

更新..

js, jquery 函数,用于每 500 毫秒向 php 发送状态。

function upd_status() {
    $.get('/php.php', function(data) {
        setTimeout(upd_status,500);
    });
}
upd_status();

在 php 方面。

// I do not know where is user id, but it should be in session
$uid = $_SESSION['user']['uid'];
settype($uid, 'int');

$sql = "UPDATE user SET status = 1, timestamp = ". time() ." WHERE id = ". $uid .";

在 cron 脚本上

$sql = "UPDATE user SET status = 0 WHERE timestamp < ". (time()-60*5); 
于 2012-05-15T14:00:55.020 回答
0

您可以使用简单的“if”操作来检查会话时间是否比实时最短。

例子。

在数据库中,在用户中创建列 last_activity。当用户发送消息进行查询以更新该列时,使用 time() 进行最后一个活动;

并且只需检查数据库中的 last_activity 是否比超时时间最短,在这种情况下,您可以设置 $timeout 变量为超时。这是代码:

<?php # make while loop from users where online = 1
$last_activity_from_database = $row['last_activity']; 
$timeout                     = time()-600; # 10 minutes
if($last_activity_from_database < $timeout){
    mysql_query("UPDATE users SET online='0'");
}
?>

您应该进行 AJAX 调用。

于 2012-05-15T13:46:47.667 回答