PHP基于cookie实现统计在线人数功能示例


Posted in PHP onJanuary 16, 2019

本文实例讲述了PHP基于cookie实现统计在线人数功能。分享给大家供大家参考,具体如下:

online.php文件:

<?php
/*
  @ PHP 在线人数统计程序
  Copyright (c) www.vgot.cn by Pader 1:25 2009年1月7日
  Homepage:http://www.vgot.cn
  QQ: 270075658
  How to use it: <script src="online.php"></script>
  note: 一般独立在线人数统计程序都是统计在线的IP数,而这并不准确
  例如局域网的访问者,比如公司,学校机房和网吧,虽然内网IP不同,但是外网IP都是一样
  如果同一个局域网的无论多少人人访问你的网站则只被认为是一个人
  这个小巧的程序解决了此问题,它以电脑为单为,每台电脑便算一个访问者
  当然因为使用的是COOKIE,如果你在同一台电脑上使用两种不同核心的浏览器访问那就别当别论了
*/
$filename = 'online.txt'; //数据文件
$cookiename = 'VGOTCN_OnLineCount'; //cookie名称
$onlinetime = 600; //在线有效时间,单位:秒 (即600等于10分钟)
$online = file($filename); 
$nowtime = time(); 
$nowonline = array();
/*
  @ 得到仍然有效的数据
*/
foreach($online as $line) {
  $row = explode('|',$line);
  $sesstime = trim($row[1]);
  if(($nowtime - $sesstime) <= $onlinetime) { //如果仍在有效时间内,则数据继续保存,否则被放弃不再统计
    $nowonline[$row[0]] = $sesstime; //获取在线列表到数组,会话ID为键名,最后通信时间为键值
  }
}
/*
  @ 创建访问者通信状态
    使用cookie通信
    COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时
*/
if(isset($_COOKIE[$cookiename])) { //如果有COOKIE即并非初次访问则不添加人数并更新通信时间
  $uid = $_COOKIE[$cookiename];
} else { //如果没有COOKIE即是初次访问
  $vid = 0; //初始化访问者ID
  do { //给用户一个新ID
    $vid++;
    $uid = 'U'.$vid;
  } while (array_key_exists($uid,$nowonline));
  setcookie($cookiename,$uid);
}
$nowonline[$uid] = $nowtime; //更新现在的时间状态
/*
  @ 统计现在在线人数
*/
$total_online = count($nowonline);
/*
  @ 写入数据
*/
if($fp = @fopen($filename,'w')) {
  if(flock($fp,LOCK_EX)) {
    rewind($fp);
    foreach($nowonline as $fuid => $ftime) {
      $fline = $fuid.'|'.$ftime."\n";
      @fputs($fp,$fline); 
    }
    flock($fp,LOCK_UN);
    fclose($fp);
  }
}
  echo 'document.write("'.$total_online.'");'; 
?>

通过注释中的说明可知,如下js语句访问即可:

<script src="online.php"></script>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 数字左侧自动补0
Mar 31 PHP
php数组中删除元素的实现代码
Jun 22 PHP
php时区转换转换函数
Jan 07 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
PHP计算一年多少个星期和每周的开始和结束日期
Jul 01 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
Jan 15 #PHP
对php 判断http还是https,以及获得当前url的方法详解
Jan 15 #PHP
php成功操作redis cluster集群的实例教程
Jan 13 #PHP
PHP赋值的内部是如何跑的详解
Jan 13 #PHP
PHP5.5新特性之yield理解与用法实例分析
Jan 11 #PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 #PHP
PHP类的自动加载机制实现方法分析
Jan 10 #PHP
You might like
博士208HAF收音机实习报告
2021/03/02 无线电
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
菜鸟学习JavaScript小实验之函数引用
2010/11/17 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python如何用filter函数筛选数据
2020/03/05 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python 实现图片批量压缩的示例
2020/12/18 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
诗普兰迪官方网站:Splendid
2018/09/18 全球购物
保安拾金不昧表扬信
2014/01/15 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
小学生学习保证书
2015/02/26 职场文书
2015年度企业工作总结
2015/05/21 职场文书