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
PHP array_push 数组函数
Dec 26 PHP
php学习之运算符相关概念
Jun 09 PHP
PHP过滤★等特殊符号的正则
Jan 27 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
php中chdir()函数用法实例
Nov 13 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
Yii中表单用法实例详解
Jan 05 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
PHP 表单提交及处理表单数据详解及实例
Dec 27 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
2016/05/18 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
2016/07/24 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
python将视频转换为全字符视频
2019/04/26 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python实现中值滤波去噪方式
2019/12/18 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
初中教师业务学习材料
2014/05/12 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
基于JavaScript实现省市联动效果
2021/06/22 Javascript
centos7安装mysql5.7经验记录
2022/05/02 Servers