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 相关文章推荐
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
php链表用法实例分析
Jul 09 PHP
PHP实现加强版加密解密类实例
Jul 29 PHP
基于PHP微信红包的算法探讨
Jul 21 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 PHP
PHP引擎php.ini参数优化深入讲解
Mar 24 PHP
详解Go与PHP的语法对比
May 29 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
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
php实现通用的信用卡验证类
2015/03/24 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
python解释器spython使用及原理解析
2019/08/24 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
美的官方商城:Midea
2016/09/14 全球购物
网络技术支持面试题
2013/04/22 面试题
中国好声音华少广告词
2014/03/17 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
二审答辩状范文
2015/05/22 职场文书