PHP实现统计在线人数功能示例


Posted in PHP onOctober 15, 2016

本文实例讲述了PHP实现统计在线人数的方法。分享给大家供大家参考,具体如下:

我记得ASP里面统计在线人数用application 这个对象就可以了。PHP怎么设计?

PHP对session对象的封装的很好,根据HTTP协议,每个范围网站的访客都可以生成一个唯一的标识符

echo session_id();
//6ed364143f076d136f404ed93c034201<br />

这个就是统计在线人数的关键所在,只有有这个session_id 也就可以区分访问的人了。因为每一个人都不同。
接下来,是怎么把session变量里面的值存到数据库里面去,这里有将介绍另一个函数

bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable$destroy , callable $gc )
//callable 可随时支取的,请求即付的,随时可偿还的
// open(string $savePath, string $sessionName) 打开连接
//close() 关闭连接
//read(string $sessionId) 对出数据
//write(string $sessionId, string $data) //写入数据
//destroy($sessionId) //删除数据
//gc($lifetime) //垃圾回收函数

注意,上面有几个函数是有参数传入的,你只要表明有传送传入就是的。PHP在执行代码的时候会自动读取

session中对于的参数

接下来就是完成上面五个函数和一个主函数就可以了

session_set_save_handler(
   array("session","open"),
   array("session","close"),
   array("session","read"),
   array("session","write"),
   array("session","destroy"),
   array("session","gc")
);

主函数就这样完成了,但为什么要用array(“session”,"方法")来调用这些方法,我真心搞不懂

(基本懂了:凡是将对象的方法作为参数传递都需要使用这种形式:array(对象, "方法名"))

接下来就是每个函数的编写

//链接数据的open
function open($path,$sessname) {
  $db = mysql_connect("localhost","root","123456","test");
  mysql_select_db("test",$db);
  mysql_query("SET NAMES UTF8");
  return true;
}

关闭数据可以链接的close

function close(){
$db = mysql_connect("localhost","root","123456","test");
mysql_close($db);
return true;
}

关键函数要开始了,显示读取函数read(),主要,read()函数是有值传进去的,传入的是session_id

function read($sid){
  $sql = "select data from session where sid='{$sid}' and card='".self::$card."'";
  $query = mysql_query($sql) or die(mysql_error());
  $row = mysql_fetch_array($query);
  $row>0?$row["data"]:" ";
}

第二个是写入函数,如果数据库里面存在的数据,只要更新时间就可以了,新数据写入

function write($sid,$data)
{
   $sql = "select sid from session where sid='{$sid}' and card='".self::$card."'";
   $query = mysql_query($sql) or die(mysql_error());
   $mtime = time();
   $num = mysql_num_rows($query);
   if($num){
    $sql = "UPDATE session SET data='{$data}', mtime ='{$mtime}'";
   }else{
    $sql = "INSERT INTO session (sid,data,mtime,ip,card) VALUES('{$sid}','{$data}','".time()."','{$_SERVER['REMOTE_ADDR']}','".self::$card."')";
   }
   mysql_query($sql);
   return true;
}

接下来就是体现PHP回收机制的函数了,两个函数都有参数传入。

function destroy($sid){
  $sql = "DELETE FROM session WHERE sid='{$sid}'";
  mysql_query($sql) or die(mysql_error());
  return true;
}
function gc($max_time){
  $max_time = 600;
  $sql = "DELETE FROM session WHERE `mtime`<'".(time()-$max_time)."'";
  mysql_query($sql) or die(mysql_error());
  return true;
}

好了,五个函数都完成了,再就是session表中间读出session的记录条数了。就能准确的统计出正在访问页面的人数。

10分钟没有操作的用户记录将被清空

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
Sep 29 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
php备份数据库类分享
Apr 14 PHP
PHP封装CURL扩展类实例
Jul 28 PHP
PHP新建类问题分析及解决思路
Nov 19 PHP
学习PHP Cookie处理函数
Aug 09 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 PHP
php从数据库读取数据,并以json格式返回数据的方法
Aug 21 PHP
PHP常用header头定义代码示例汇总
Aug 29 PHP
Thinkphp连表查询及数据导出方法示例
Oct 15 #PHP
PHP实现导出excel数据的类库用法示例
Oct 15 #PHP
PHP数组操作简单案例分析
Oct 15 #PHP
PHP链表操作简单示例
Oct 15 #PHP
PHP在线打包下载功能示例
Oct 15 #PHP
PHP文件上传处理案例分析
Oct 15 #PHP
PHP小偷程序的设计与实现方法详解
Oct 15 #PHP
You might like
PHP include_path设置技巧分享
2011/07/03 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
小程序实现留言板
2018/11/02 Javascript
浅析JavaScript 函数柯里化
2020/09/08 Javascript
Python列表计数及插入实例
2014/12/17 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
python定间隔取点(np.linspace)的实现
2019/11/27 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
django使用graphql的实例
2020/09/02 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
土木工程专业大学毕业生求职信
2013/10/13 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
日化店促销方案
2014/03/26 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2014年化验员工作总结
2014/11/18 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
百年校庆感言
2015/08/01 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js