PHP网站中,如何判断用户是否是在线的状态?

发布网友 发布时间:2022-04-06 00:40

我来回答

2个回答

懂视网 时间:2022-04-06 05:02

php判断页面是否关闭的方法:可以利用connection_status()函数来进行判断。如果该函数返回0,则表示连接运行正常;如果返回1,则表示连接由用户或网络错误终止。

相关函数介绍:

connection_status() 函数返回当前的连接状态。

(推荐教程:php视频教程)

可返回的可能值:

  • 0 - CONNECTION_NORMAL - 连接运行正常

  • 1 - CONNECTION_ABORTED - 连接由用户或网络错误终止

  • 2 - CONNECTION_TIMEOUT - 连接超时

  • 3 - CONNECTION_ABORTED & CONNECTION_TIMEOUT

  • 代码实现:

    echo str_repeat(" ",3000);
    ignore_user_abort(true); 
    mylog('online');
    while (true) {
     /*
     * 1、程序正常结束 connection_status 0
     * 2、点击浏览器“停止”按钮 connection_status 1
     * 3、超时 connection_status 2
     */
     echo "test<br>
    "; //注意程序一定要有输出,否则ABORTED状态是检测不到的
     flush();
     sleep(1);
     if (connection_status()!=0){
     mylog('offline');
     die('end the script');
     }
    }
    function mylog($str)
    {
     $fp = fopen('e:/abort.txt', 'a');
     $str = date('Y-m-d H:i:s').$str."
    ";
     fwrite($fp, $str);
     fclose($fp);
    }

    热心网友 时间:2022-04-06 02:10

    普通http网站是一种无状态连接,每次一个请求,一个应答,没有长连接状态。

    但是可以通过记录访问时间,来确定用户的状态。

    用户登录后,每次访问,更新一下最近访问时间在数据库里

    在用户页面的公共部分,做一个定时轮询,n秒一次(防止用户打开页面后放着不动,看资料或者做别的)

    服务器端做一个定时,将最近时间在n秒内的用户设为在线状态,将最近时间大于n秒的(说明已经关了页面),设为离线状态。 如果是普通 web空间无法配置定时器,可以在每次用户访问时处理一次(如果用户量大,需要做时间判断,防止同时访问量多时多次重复处理,影响服务器性能)

    如果能确定一个用户的访问,只有一个浏览器窗口,可以在窗口里加一个关闭事件(onbeforeunload),在此事件中发送一个退出请求,主动设为离线状态。这样状态管理会更完美一些

    这样基本就可以完成一个在线状态的管理。具体n 设为多少可根据情况而定,一般5-30秒都是合理的,太短了服务器压力比较大,太长了误差会比较大

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com