Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php、mysql和ajax中显示用户在线或离线会话_Php_Jquery_Mysql_Ajax_Session - Fatal编程技术网

如何在php、mysql和ajax中显示用户在线或离线会话

如何在php、mysql和ajax中显示用户在线或离线会话,php,jquery,mysql,ajax,session,Php,Jquery,Mysql,Ajax,Session,请告诉我如何通过访问用户的会话来显示用户处于联机或脱机状态。 这是php和mysql查询 标题'Content-Type:application/json'; $array=数组; $res=mysql\u querySELECT*FROM`posts`其中status=1; 如果MySQL\u num\u行$res>0{ 而$row=mysql\u fetch\u assoc$res{ $array[]=$row['user_id'];//这会将每个联机用户id添加到数组中 } } echo

请告诉我如何通过访问用户的会话来显示用户处于联机或脱机状态。 这是php和mysql查询

标题'Content-Type:application/json'; $array=数组; $res=mysql\u querySELECT*FROM`posts`其中status=1; 如果MySQL\u num\u行$res>0{ 而$row=mysql\u fetch\u assoc$res{ $array[]=$row['user_id'];//这会将每个联机用户id添加到数组中 } }
echo json_encode$数组 PHP将每个用户的会话数据存储在服务器上的临时文件夹中。此文件夹在php.ini配置文件中变量session.save_路径下定义。从php.ini文件中查找此值,或者使用以下内容创建一个php文件:

<?php echo "Session Save Path: " . ini_get( 'session.save_path');?>
作为其内容,并在浏览器中打开该文件

找到会话数据的保存路径后,打开该文件夹,您将看到一个相当简单的结构。所有会话都以以下格式存储:sess_u$SESSIONID


会话数据在存储到磁盘之前被序列化。因此,存储在会话文件中的对象在可用之前必须进行反序列化。但是,如果您使用纯文本(按原样存储)来存储会话数据,例如$\u session['userid']=1234来存储有关用户的信息,那么从文件中解析您要查找的数据应该很容易。这将是您获取活动会话并将状态设置为在线的另一种选择。

没有直接的方法可以做到这一点。没有合适的方法来检测用户是否关闭了浏览器。我见过一种常用的方法[在您的上下文中]解决这个特定问题,就是在posts表中使用last_activity_timestamp字段。每次用户执行任何活动时,最后的\u activity\u时间戳都会用新时间更新

$res = mysql_query("UPDATE `posts` SET last_update_timestamp = NOW() WHERE user_id = {$currentUserId};");
然后,在用于检查用户当前是否在线的代码中,您还可以检查某个时间段(例如,自用户的最后一次活动开始20分钟)是否已过,如下所示:

$res = mysql_query("SELECT * FROM `posts` WHERE status=1 AND TIMESTAMPDIFF(MINUTE, last_activity_timestamp, NOW()) > 20;");
如果用户的最后一个活动超过20分钟,那么他实际上已经注销。

您可以/应该使用UNIX时间戳

这样可以更好地显示用户是在线还是离线

if($time >= $loggedtime)

我写了一些代码,这些代码对我来说很有吸引力,可以在线和离线更新用户的状态

你所要做的就是在每页中调用这两行,我在我的主用户页中使用一个函数,在页眉中调用它,然后在每页中调用页眉

    mysqli_query($con, "UPDATE users SET status = 'offline' WHERE TIMESTAMPDIFF(MINUTE, lastactive, NOW()) > 1 AND username = '$username' LIMIT 1");
    mysqli_query($con, "UPDATE users SET status = 'online' WHERE TIMESTAMPDIFF(MINUTE, lastactive, NOW()) < 1 AND username = '$username' LIMIT 1");

简单的步骤,只需像这样使用javascript调用页面

<!DOCTYPE html>
<html>
<head>
    <title>Autorefresh Browser using jquery</title>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script type="text/javascript">
        $(function() {
            startRefresh();
        });
        function startRefresh() {
            setTimeout(startRefresh,2000);
            $.get('text.html', function(data) {
                $('#viewHere').html(data);
            });
        }
    </script>

</head>
<body>
    <div id="viewHere"></div>
</body>
</html>
使用页面更改text.html并设置TimeOutstartRefresh,2000;随你的需要而定

对不起,我英语不好

这是完整的来源


您在代码中的何处使用了该会话,但当会话销毁时,它将显示脱机状态??当会话销毁时,该条目在文件中不可用。与轮询表、轮询文件和更新状态的方式相同。这看起来像一个可靠的解决方案。你能提供更多关于将会话文件中的信息反序列化以显示在页面上的详细信息吗?但是如果用户只是阅读了几篇文章而没有做任何活动怎么办?@AmalSurendran这取决于你的站点类型。例如,您可以检查用户是否在15分钟内处于非活动状态,然后显示离开状态。30分钟后,如果用户仍处于非活动状态,则可以显示脱机状态。或者,另一种方法是,您可以在javascript中设置一个计时器,并通知用户他将要注销,并且他必须单击一个按钮以保持登录状态。这些都是可以在逻辑的业务方面解决的问题。。。