PHP实现统计在线人数功能示例
本文实例讲述了PHP实现统计在线人数的方法。分享给大家供大家参考,具体如下:
我记得ASP里面统计在线人数用application 这个对象就可以了。PHP怎么设计?
PHP对session对象的封装的很好,根据HTTP协议,每个范围网站的访客都可以生成一个唯一的标识符
|
1
2
|
echo session_id();//6ed364143f076d136f404ed93c034201<br /> |
这个就是统计在线人数的关键所在,只有有这个session_id 也就可以区分访问的人了。因为每一个人都不同。
接下来,是怎么把session变量里面的值存到数据库里面去,这里有将介绍另一个函数
|
1
2
3
4
5
6
7
8
|
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中对于的参数
接下来就是完成上面五个函数和一个主函数就可以了
|
1
2
3
4
5
6
7
8
|
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(对象, "方法名"))
接下来就是每个函数的编写
|
1
2
3
4
5
6
7
|
//链接数据的openfunction open($path,$sessname) { $db = mysql_connect("localhost","root","123456","test"); mysql_select_db("test",$db); mysql_query("SET NAMES UTF8"); return true;} |
关闭数据可以链接的close
|
1
2
3
4
5
|
function close(){$db = mysql_connect("localhost","root","123456","test");mysql_close($db);return true;} |
关键函数要开始了,显示读取函数read(),主要,read()函数是有值传进去的,传入的是session_id
|
1
2
3
4
5
6
|
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"]:" ";} |
第二个是写入函数,如果数据库里面存在的数据,只要更新时间就可以了,新数据写入
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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回收机制的函数了,两个函数都有参数传入。
|
1
2
3
4
5
6
7
8
9
10
11
|
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实现统计在线人数功能示例的更多相关文章
- asp.net MVC 统计在线人数功能实现
今天开发一个设计一个统计在线人数的统计.实现方式是在MVC 中,用户次执行一个Action请求完成后,向数据表中插入一条用户心跳记录,统计在线人数则是根据该记录,30分钟内有记录的用户则为在线状态. ...
- PHP 实现精确统计在线人数功能
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com PHP对session对象的封装的很好,根据HTTP协议,每个范 ...
- Application 统计在线人数
MVC 统计在线人数: protected void Application_Start() { Application[; AreaRegistration.RegisterAllAreas(); ...
- Javaweb统计在线人数的小栗子
最近在学习Javaweb相关的内容(不黑不吹之前对web开发零基础),下面通过一个统计在线人数的小栗子讲讲Servlet监听器吧 开发环境 eclipse tomcat 7 先说说这个小栗子的构思: ...
- Servlet监听器统计在线人数
监听器的作用是监听Web容器的有效事件,它由Servlet容器管理,利用Listener接口监听某个执行程序,并根据该程序的需求做出适应的响应. 例1 应用Servlet监听器统计在线人数. (1)创 ...
- 利用php比较精确的统计在线人数的办法
利用php比较精确的统计在线人数的办法,注意这里所说的精确是指个数,如果需要精确在时间上,则需要根据实际情况调整代码中的有效时间.(自己没有写,从别人那拿过来的,先放着然后再研究)<?php// ...
- 【java】org.apache.commons.lang3功能示例
org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...
- 更新日志 - fir.im「高级统计」功能上线
距离 2016 年到来只剩 10 个日夜,fir.im 也准备了一些新鲜的东西,比如「高级统计」功能和「跳转应用商店」功能,帮助你更好地管理.优化应用,欢迎大家试用反馈:) 新增高级统计功能 这次更新 ...
- (实用篇)php精确的统计在线人数的方法
这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读. <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN ...
随机推荐
- 你不知道的Google控制台
1.页面可编辑 document.body.contentEditable=true 2.console.table() 3.console.dir 4.clear() 清空控制台 5.sources ...
- Java8 中 ConcurrentHashMap工作原理的要点分析
简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这些 ...
- poj 1154 letters (dfs回溯)
http://poj.org/problem?id=1154 #include<iostream> using namespace std; ]={},s,r,sum=,s1=; ][]; ...
- Bitmap的加载与缓存
Android系统中图片一般用Bitmap对象表示,它支持png,jpg等常见格式.通常情况下图片的体积都比较大,单个应用允许使用的内存又是有限的,所以我们需要采取一些手段减少内存占用并提高加载速度. ...
- 【Darwin】 越狱后玩耍IPhone系统
玩耍IOS系统 大家都知道IOS是自Mac OS修改而来的.而Mac OS和IOS的共同核心是Darwin,其基于FreeBSD发展而来,整体而言也是个类Unix系统.之前把自己的手机越狱之后正好开始 ...
- 【Python】 魔法方法
魔法方法 这个名字真的很中二有没有 = =(或者说翻译气息太浓了,作为一个学外语的看到这种真是想吐槽的不行..) 从形式上来说,在方法的名字前后个加上两条下划线的就是魔法方法了 .从功能上说,所有魔法 ...
- Linux运维主流架构简单剖析
随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS.RedHat.Ubuntu.Fedora等等,成千上亿个网站涌现在当今互联网,互联网 ...
- Redis --> 为redis分配新的端口
为redis分配新的端口 为redis分配一个8888端口,操作步骤如下:1.$REDIS_HOME/redis.conf重新复制一份,重命名为redis8888.conf.2.打开redis8888 ...
- CSS以及JQuery总是忽略掉的小问题
1.自动居中一列布局需要设置 margin 左右值设置为 auto,而且一定要设置width为一个定值. 2.css3: 3.修改时间SQL(格式) update table set timeColu ...
- Jupyter Notebook的快捷键
Jupyter Notebook 有两种键盘输入模式. 编辑模式,允许你往单元中键入代码或文本,这时的单元框线是绿色的. 命令模式,键盘输入运行程序命令:这时的单元框线是蓝色. 命令模式 ...