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版
Oct 09 PHP
PHPMyAdmin 快速配置方法
May 11 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
PHP 解决session死锁的方法
Jun 20 PHP
PHP base64编码后解码乱码的解决办法
Jun 19 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
php通过session防url攻击方法
Dec 10 PHP
php备份数据库类分享
Apr 14 PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
php自定义错误处理用法实例
2015/03/20 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
详解AngularJS中的作用域
2015/06/17 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
详解angular element()方法使用
2017/04/08 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
Python多线程和队列操作实例
2015/06/21 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
Python学习笔记之图片人脸检测识别实例教程
2019/03/06 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
幼儿教师工作感言
2014/02/14 职场文书
社会发展项目建议书
2014/08/25 职场文书
工作保证书怎么写
2015/02/28 职场文书
2015年环卫工作总结
2015/04/28 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
您对思维方式了解多少?
2019/12/09 职场文书