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 之入门篇
Dec 04 PHP
PHP日期时间函数的高级应用技巧
May 16 PHP
PHP 数组基础知识小结
Aug 20 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
php合并数组中相同元素的方法
Nov 13 PHP
PHP扩展Memcache分布式部署方案
Dec 06 PHP
PHP缓冲区用法总结
Feb 14 PHP
php中namespace及use用法分析
Dec 06 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
thinkPHP5.0框架开发规范简介
Mar 25 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
phpmyadmin的#1251问题
2006/11/25 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
php生成短网址示例
2014/05/05 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
JS创建优美的页面滑动块效果 - Glider.js
2007/09/27 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
python中的lambda表达式用法详解
2016/06/22 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
打架检讨书2000字
2014/02/22 职场文书
工程造价专业求职信
2014/07/17 职场文书
班主任高考寄语
2015/02/26 职场文书
2015高考寄语集锦
2015/02/27 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏