PHP / AJAX用户最后在线显示实时

时间:2017-07-08 10:49:46

标签: php ajax

我有一段很好的代码,显示有多少用户在线使用名为“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");

1 个答案:

答案 0 :(得分:0)

  

您应该使用WebSocket和Redis

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

了解更多

Redis链接&gt;&gt; Redis
WebSocket链接&gt;&gt; Socket.IO