我是聊天节目,但无法找到显示在线和离线用户的方式。 我使用会话在线用户。当用户登录页面而非空会话更新数据库和在线1。 现在如何知道用户从聊天或关闭浏览器注销。我知道会议时间或捕获可以做到这一点,但我不能写合适的代码。有谁可以帮我,并在这里提供完整的代码? 谢谢你的回答
for show online:
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']!=""
}
答案 0 :(得分:1)
您可以使用php脚本按计划运行,当用户不在某个时间站点时,该脚本将更新状态为脱机。
为此,您有时应该通过ajax将用户状态发送到服务器,并将其存储在数据库中。
更新..
js,jquery函数,每隔500ms发送一次状态到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 .";
on cron script
$sql = "UPDATE user SET status = 0 WHERE timestamp < ". (time()-60*5);
答案 1 :(得分: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调用。