如何简单实现论坛实时在线用户统计

本文介绍一种简单方法来解决论坛实时在线用户统计问题。通过创建临时文件夹存放session文件,利用session_start()和自定义函数run_online(),统计tmp文件夹下的session文件数量以确定在线用户数。同时,通过检查文件内容排除无效session,区分过客和特定版区的在线人数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该方法简单实现了一直以来被广泛论讨、较难实现论坛实时在线用户统计的问题。

现在此简述一下原理。

首先建一文件夹tmp,用来储存session用户的SESS文件(正常情况下SESS文件是默认存在系统目录window下的tmp文件夹中);

然后声明:
session_save_path('tmp');
session_start();

function run_online(){
  //变量$title :是每一页面名字,即可做为用户所处的当前位置来用;
  //变量$web :一个预设的数组变量;
  global $web,$title;
  global $onliner_num;

  $_SESSION['locate']=$title; //确立当前位置

  if(!$_SESSION['ip'] || $_SESSION['ip']!=$web['ip']){
    $_SESSION['ip']=$web['ip']; //确立用户IP写入SESS文件
  }

  session_write_close(); //关闭,以便SESS文件可读

  $onliner_num['guest']=0; //初始过客在线人数
  $onliner_num['area']=0; //初始当前版区在线人数

  $sess_file=@glob('tmp/*'); //遍历tmp文件夹下SESS文件,即开始统计用户量
  foreach($sess_file as $key=>$file){
    $file_contents=@file_get_contents($file);
    //如果是本人session_id()的、或是本人IP的、或已设置cookies时限,并到期的、或SESS文件大小为0(无效)的等等,则删除之:
    if($file!='tmp/sess_'.session_id()
    && ((!strstr($file_contents,'timeover|') && ((time()-filemtime($file))>$web['stop_online_time'] || preg_match('/(ip/|s:/d+:/"'.$web['ip'].'/";)|(user/|s:/d+:/"'.$_SESSION['user'].'/";)/i',$file_contents))) || (preg_match('/timeover/|i:"(/d+)";/',$file_contents,$m) && time()>$m[1]) || filesize($file)==0)){
      @unlink($file);
      unset($sess_file[$key]);
      continue;
    }
    //如果未登录的,则过客数加1:
    if(!strstr($file_contents,'user|')){
      $onliner_num['guest']++;
    }
    //如果SESS文件中的$_SESSION['locate']与当前所处版区的参数符合,则目前该版区的人数加1
    if(strstr($file_contents,$_REQUEST['forum'].'/'.$_REQUEST['area'])){
      $onliner_num['area']++;
    }
    //在此还可进行其它项目在线人数的查询,如当前页面在线人数
  }

  $onliner_num['all']=count($sess_file); //目前所有在线人数
  get_online_record($onliner_num['all']); //这是另一个函数。用以在线人数超记录时,将在线记录写入数据库文件
}

//将此函数放置在每一个页面中,如footer之后,然后调用数组$onliner_num即可

 具体应用参见:http://www.162100.com/forum/


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值