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
|
//链接数据的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
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 ...
随机推荐
- Bower快速学习
什么是bower? Bower是一个前端类库管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的类库. 官网:https://bower.io/ 安装bower 使用npm, ...
- 总结linux路由技术
Linux系统的route命令用于显示和操作IP路由表,要实现两个不同的网段之间的通信,需要一台连接两个网络的路由器,或者同时连接位于两个网络的网关来实现. 在Linux系统中,设置路由通常是为了解决 ...
- c++ --> c++中四种类型转换方式
c++中四种类型转换方式 c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...
- vue-过渡动画
本篇资料参考于官方文档: http://cn.vuejs.org/guide/transitions.html 概述: Vue 在跳转页面时,提供多种不同方式的动画过渡效果. ●in-out:新元素先 ...
- MySQL_执行计划详细说明
1 简要说明 id 表格查询的顺序编号. 降序查看,id相同的从上到下查查看. id可以为null ,当table为( union ,m,n )类型的时候,id为null,这个时候,id的 ...
- linux下文件的复制、移动与删除命令为:cp,mv,rm
一.文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) cp [option] source1 source2 sour ...
- JavaEE HttpServlet 解析
上一篇 文章中有提到,GenericServlet 是对 Servlet 的一个通用实现,并提供了一个抽象的 service() 方法.而我们的互联网是使用 Http 协议来通信的,那针对这个&quo ...
- 简易web服务器
当通过Socket开发网络应用程序的时候,首先需要考虑所使用的网络类型,主要包括以下三个方面: 1)Socket类型,使用网络协议的类别,如IPv4的类型为PF_INET. 2)数据通信的类型,常见的 ...
- 20162323周楠《Java程序设计与数据结构》第五周总结
20162323周楠 2016-2017-2 <程序设计与数据结构>第五周学习总结 教材学习内容总结 1.面向对象软件设计的基本部分是确定程序中应该创建哪些类: 2.面向对象程序设计的核心 ...
- 为label或者textView添加placeHolder
Tip:使用textView的代理需要在头文件中加入: <UITextViewDelegate> h文件 @interface FeedbackViewController : UIVie ...