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 变量未定义等错误的解决方法
Jan 12 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
Oct 31 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
分享下php5类中三种数据类型的区别
Jan 26 PHP
php格式化金额函数分享
Feb 02 PHP
PHP发送短信代码分享
Aug 11 PHP
PHP在linux上执行外部命令的方法
Feb 06 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
Python实现中值滤波去噪方式
2019/12/18 Python
关于python 跨域处理方式详解
2020/03/28 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
Python基于模块Paramiko实现SSHv2协议
2020/04/28 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
2021/01/28 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
写给女朋友的检讨书
2014/01/28 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
经典公益广告词
2014/03/13 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
电子商务求职信
2014/06/15 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2014年调度员工作总结
2014/11/19 职场文书
小学中队活动总结
2015/05/11 职场文书