首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在聊天室侧边栏中显示联机用户

问在聊天室侧边栏中显示联机用户
EN

Stack Overflow用户
提问于 2012-05-15 21:08:25
回答 2查看 1.7K关注 0票数 1

我程序聊天室,但找不到显示在线和离线用户的方法。我为在线用户使用了会话。当用户登录页面且不为空时,更新数据库并在线1。现在知道如何从聊天或关闭浏览器中注销用户。我知道会话时间或catch可以做到这一点,但我不能写合适的代码。有人能帮我把完整的代码放在这里吗?感谢您的答复

对于在线显示:

代码语言:javascript
复制
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']!=""
}
EN

回答 2

Stack Overflow用户

发布于 2012-05-15 22:00:55

您可以使用php脚本按计划运行,当用户某段时间不在站点时,该计划将状态更新为脱机。

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

更新..

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

代码语言:javascript
复制
function upd_status() {
    $.get('/php.php', function(data) {
        setTimeout(upd_status,500);
    });
}
upd_status();

在php端。

代码语言:javascript
复制
// 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脚本

代码语言:javascript
复制
$sql = "UPDATE user SET status = 0 WHERE timestamp < ". (time()-60*5); 
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 21:46:48

你可以通过简单的if操作来检查会话时间是否比realtime短。

举例说明。

在数据库制作列users.When用户last_activity中发送消息制作更新列,最后一次活动与时间();

只需检查数据库中是否存在比超时更短的超时,在这种情况下,您可以设置超时的$timeout变量。代码如下:

代码语言:javascript
复制
<?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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10601367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档