2017-07-08 40 views
0

我有一段很好的代码,显示了有多少用户使用来自名为'online_users'的表的会话在线。PHP/AJAX用户上次在线实时显示

我使用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在线用户方法(下面的代码中的方法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"); 

回答

0

您应该使用的WebSocket和Redis的,而不是

这样的查询数据库可以让你的应用程序慢,消耗更多的数据

更多

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

相关问题