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笔记之:有规律大文件的读取与写入的分析
Apr 26 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
PHP中常用的转义函数
Feb 28 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
typecho插件编写教程(二):写一个新插件
May 28 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
简单谈谈PHP vs Node.js
Jul 17 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
php支付宝系列之电脑网站支付
May 30 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
PHP字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
如何利用python进行时间序列分析
2020/08/04 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
假面舞会策划方案
2014/05/29 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
党员剖析材料范文
2014/12/18 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书