php实现用户在线时间统计详解


Posted in PHP onOctober 08, 2011

首先介绍一下所涉及的数据表结构,四个字段:
代码如下:

uid<int(10)> :用户id 
session_id<varchar(40)> :用户登录后系统产生的session_id,PHP可是使用session_id()函数获取 
login_time<int(10)> :登录时间 
logout_time<int(10)> :登出时间

1、客户端定时发送请求到服务器端。实现方法是在用户登录后,将uid,session_id,login_time插入一条记录,然后在客户端js设定一个计时器,比如每10分钟向服务器端发送一个请求,以此来达到更新登出时间的目的,当然这个间隔时间设定的越短,数据可能会越准确,不过相应的系统的负载也会越高,这个可以根据实际情况设定一个合适的值。这种方法广泛应用于webgame上,因为webgame的几乎所有请求都是ajax请求,不用刷新页面,一旦刷新页面,这个计时器就失去了价值,这也是这个方法的局限性。

2、务器设定一个定时轮询的脚本。这个方法是在服务器端写一个定时执行的脚本,比如5分钟执行一次,根据数据库中的记录来判断每个会话的 session_id是否还存在于服务器上,如果存在就更新logout_time,不存在就跳过。这样也能比较准确的统计在线时间,不过缺点是需要有服务器的控制权,不然无法设定定时脚本,linux系统可以通过crontab实现,windows系统可以通过计划任务来完成。如果你只是买的虚拟主机,那么这个方法也同样不适合你。

3、在用户每次活动时更新一下登出时间。这样在用户不活动或者退出的时候,登出时间就自然而 然的存在于数据库里了,这也是本文着重讨论的方案。下面给出实现方法。
首先,在用户登录成功后,记录下其uid,session_id,并将现在时间作为登陆时间,现在时间 600s作为登出时间,插入数据库。
代码如下:

$uid = $_SESSION[uid] = $info[id]; 
$session_id = $_SESSION[session_id] = session_id(); 
$login_time = time(); 
$logout_time = time() 600; 
$sql = "INSERT INTO member_login (uid,session_id,login_time,logout_time) values($uid,$session_id,$login_time,$logout_time)"; 
mysql_query($sql);

然后在用户每次活动,也就是每点击一个页面时,如果session存在也就是处于登录状态时,更新用户登出时间
代码如下:
if($_SESSION[uid]){ 
$uid = $_SESSION[uid]; 
$session_id = $_SESSION[session_id]; 
$logout_time = time() 600; 
$sql = "UPDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND session_id=$session_id"; 
mysql_query($sql); 
}

这种方法的优点是相对来说实现起来比较简单,能够适用于大多数的网站,没有额外的服务器需求,而且也可以比较准确的统计用户的在线时间。

缺点也很明显,增加了数据库的更新操作,增加了系统的负载,不过对于中小型网站来说应该不是问题。

PHP 相关文章推荐
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP连接SQLServer2005方法及代码
Dec 26 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
php注册登录系统简化版
Dec 28 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
PHP身份证校验码计算方法
Aug 10 PHP
PHP类相关知识点实例总结
Sep 28 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
May 16 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 PHP
php 文件缓存函数
Oct 08 #PHP
php数字转汉字代码(算法)
Oct 08 #PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 #PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 #PHP
PHP下判断网址是否有效的代码
Oct 08 #PHP
Admin generator, filters and I18n
Oct 06 #PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 #PHP
You might like
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
ASP中Sub和Function的区别说明
2020/08/30 Javascript
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
vue移动UI框架滑动加载数据的方法
2018/03/12 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
urllib2自定义opener详解
2014/02/07 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
深入理解python多进程编程
2016/06/12 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
外贸英文求职信范文
2015/03/19 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js