【问题标题】:PHP / AJAX user last online displayed in real timePHP/AJAX用户上次在线实时显示
【发布时间】:2017-07-08 18:56:37
【问题描述】:

我有一段很好的代码,它显示有多少用户使用名为“online_users”的表中的会话在线。

我正在使用 AJAX 将我的数据返回到我的 PHP 主页(这很有效;我只需要检查每个在线客户端更改的方法)。

Here is a picture of my current styling using the first code method below

Here is a picture of my 'Online_users' table in my database

我需要使用与此代码相同的方法来检查每个用户的在线时间。

目前,它只计算有多少用户在线。

我还有另一段代码要检查,但它的运行方式与第二种方法(获取在线用户计数的方法)不同。如果计时器已过,则此选项显示脱机。我需要使其工作方式与 count online users 方法(下面代码中的方法 2)相同,以便它检查我的数据库中的会话。

我需要通过检查我的表“online_users”中的会话来使每个单独的用户检查都以相同的方式进行。

我的第一个代码(工作但在一段时间后变为脱机,而不是检查会话是否仍处于活动状态):

//First, define our client_is_online so we don't throw errors in the while loop
$client_is_online = "";

//Get online users individually and echo if they're online or not in a div class
$user_grab = mysqli_query($con, "SELECT * FROM users");
while($users_ = mysqli_fetch_array($user_grab)) {

$last_online = strtotime($users_['lastonline']);

if(time() - $last_online < 30) {
    $client_is_online .= '
         <div class="chat-list-item sidebar-tab -available" data-target="#chat-view-tab" style="background: rgba(255,255,255,0.1); padding: 5px;">
            <img class="chat-list-avatar" src="'.$users_['profile_picture'].'" style="width: 40px; height: 40px; padding: 7px; border-radius: 20px;" /><i class="fa fa-circle chat-list-status"> </i>
            <div class="chat-list-user">'.$users_['username'].' (<font size="2">'.get_users_level_all($users_['userLevel']).'</font>)</div>
            <div class="chat-list-excerpt">Online</div>
         </div>
    ';
} else {
    $client_is_online .= '
         <div class="chat-list-item sidebar-tab -away" data-target="#chat-view-tab" style="background: rgba(255,255,255,0.1); padding: 5px;">
            <img class="chat-list-avatar" src="'.$users_['profile_picture'].'" style="width: 40px; height: 40px; padding: 7px; border-radius: 20px;" /><i class="fa fa-circle chat-list-status"> </i>
            <div class="chat-list-user">'.$users_['username'].' (<font size="2">'.get_users_level_all($users_['userLevel']).'</font>)</div>
            <div class="chat-list-excerpt">Offline</div>
         </div>
    ';
}
}

我的第二个代码(获取在线用户数 - 完美运行,但我需要使用这种方式检查每个用户是否在线):

//Count online users
$session = session_id(); $time = time(); $time_check = $time - 30; //We have set a check of 30 seconds
$result = mysqli_query($con, "SELECT * FROM online_users WHERE session = '$session'");
$count  = mysqli_num_rows($result); 

if($count == '0') { $result1 = mysqli_query($con, "INSERT INTO online_users(session, time) VALUES ('$session', '$time')"); }
else { $result2 = mysqli_query($con, "UPDATE online_users SET time = '$time' WHERE session = '$session'"); }

$result3     = mysqli_query($con, "SELECT * FROM online_users");
$totalOnline = mysqli_num_rows($result3);
$result4     = mysqli_query($con, "DELETE FROM online_users WHERE time < $time_check");

【问题讨论】:

    标签: php ajax


    【解决方案1】:

    你应该改用 WebSocket 和 Redis

    这样查询数据库会使您的应用程序变慢并消耗更多数据

    阅读全文

    Redis 链接 >> Redis
    WebSocket 链接>>Socket.IO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2012-11-08
      相关资源
      最近更新 更多