PHP / AJAX检查用户上次在线

时间:2017-07-08 00:06:22

标签: php ajax

我想创建一段代码来检查单个用户是否在线。 如果用户在线,我有一个很好的风格可以显示绿色的在线圈子。 PHP示例的图片 我有代码为PHP创建这个功能,但我想让它实时可用(没有页面刷新,将用户图标更改为灰色圆圈,以便他们“脱机”或将绿色圆圈更改为&# 39;在线)也许使用AJAX。就像我说的,我有课程来显示圈子,所以我不需要任何造型。只是AJAX,它可以检查他们是否在线而不刷新。 我还有一段代码可以检查有多少客户在线而没有刷新并且正在工作但是我不确定如何将其用于获取个人客户的时间。我将在下面发布我的两个代码。 我的PHP工作但没有AJAX代码(需要页面加载才能更改用户状态): < PHP     $ user_grab = mysqli_query($ con," SELECT * FROM users");     while($ users_ = mysqli_fetch_array($ user_grab)){         $ last_online = strtotime($ users _ [' lastonline']);         if(time() - $ last_online< user_session_timeout()){             回声'                  < div class =" chat-list-item -available" style =" background:rgba(255,255,255,0.1);">                     < img class =" chat-list-avatar" src ="'。$ users _ [' profile_picture']。'" />< i class =" fa fa-circle chat-列表状态"> < I&GT /;                     < 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>             &#39 ;;         } else {             回声'                  < div class =" chat-list-item -offline" style =" background:rgba(255,255,255,0.1);填充:5px;">                     < img class =" chat-list-avatar" src ="'。$ users _ [' profile_picture']。'" />< i class =" fa fa-circle chat-列表状态"> < I&GT /;                     < div class =" chat-list-user">'。$ users _ [' username']。' (< font size =" 2">' .get_users_level_all($ users _ [' userLevel'])。'< / font>)< / DIV>                     < div class =" chat-list-excerpt">离线< / div>                  < / DIV>             &#39 ;;         }     } ?> ` 我有一些PHP代码可以工作(它获得当前的在线用户),但我不知道如何检查每个用户的在线状态,并显示不同的类,如果他们在线或离线。 代码 : $ session = session_id(); $ time = time(); $ time_check = $ time - 300; //我们设定时间5分钟 $ sql =" SELECT * FROM online_users WHERE session =' $ session'&#34 ;; $ result = mysqli_query($ con,$ sql); $ count = mysqli_num_rows($ result); //如果count为0,则输入值 if($ count ==" 0"){     $ sql1 =" INSERT INTO online_users(会话,时间)价值(' $ session',' $ time')&#34 ;;     $ result1 = mysqli_query($ con,$ sql1); }  //否则更新值  其他{     $ sql2 ="更新online_users设置时间=' $ time'会话=' $ session'&#34 ;;     $ result2 = mysqli_query($ con,$ sql2); }  $ sql3 =" SELECT * FROM online_users&#34 ;;  $ result3 = mysqli_query($ con,$ sql3);  $ count_user_online = mysqli_num_rows($ result3);  echo"< b>在线用户:< / b> $ count_user_online&#34 ;;  // 5分钟后,会话将被删除  $ sql4 =" DELETE FROM online_users WHERE time< $ time_check&#34 ;;  $ result4 = mysqli_query($ con,$ sql4); 我现在只有AJAX才能获得在线用户。 我想要一段AJAX代码,它将检查每个用户的在线状态,并在此问题的顶部代码中显示我使用的不同在线/离线类: 我的AJAX用于获取在线客户: <脚本>     function fetchOnline(){         $就({             url:"包含/ get_dash_settings.php",             context:document.body,             成功:函数(值){                 var data = value.split(",");                 $('#totalUsers&#39)。HTML(数据[0]);                 $('#totalOnline&#39)。HTML(数据[1]);                 $('#freeModeStatus&#39)。HTML(数据[2]);                 $('#bypassesStatus&#39)。HTML(数据[3]);             },             完成:函数(){                的setTimeout(fetchOnline,5000);             }         })     }     $(document).ready(function(){setInterval(fetchOnline,5000);}); < /脚本>

2 个答案:

答案 0 :(得分:0)

我建议不要返回JSON,其中包含有关该用户的信息以及另一个关于有多少用户在线的JSON密钥对。然后,您可以根据结果对返回的JSON进行操作以更新页面上的元素。

答案 1 :(得分:0)

您没有说出您正在使用的数据库引擎。我将假设MySql,您可以在其中进行连接。

在这种情况下,我认为你正在寻找这样的东西:

SELECT * FROM users LEFT JOIN online_users ON users.id=online_users.id

但是,我无法分辨您的架构是什么以及如何将online_user连接到用户。您可以使用可以使用的会话表,或者您需要在online_users表中存储用户的ID或用户名。现在,你只有会话和时间,我不知道如何将会话连接到用户。

然后您可以使用以下方式判断用户是否在线:

!is_null($users_['time'])