php下统计用户在线时间的一种尝试
2015-01-24信息快讯网
一直以来,在web开发中,准确统计用户在线时间都是一个老大难的问题,虽然已经有很多人去尝试各种不同的方案,可是毕竟项目不同,所用到的方法也是千差万别
下面列出几个比较常用的方法:首先介绍一下所涉及的数据表结构,四个字段:
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); }
这种方法的优点是相对来说实现起来比较简单,能够适用于大多数的网站,没有额外的服务器需求,而且也可以比较准确的统计用户的在线时间。
缺点也很明显,增加了数据库的更新操作,增加了系统的负载,不过对于中小型网站来说应该不是问题。
用phpmailer实现简单openvpn用户认证的实现代码
PHP 日,周,月点击排行统计
如何用phpmyadmin设置mysql数据库用户的权限
PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
PHP性能优化工具篇Benchmark类调试执行时间
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
PHP实现时间轴函数代码
php实现用户在线时间统计详解
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
PHP将DateTime对象转化为友好时间显示的实现代码
shopex中集成的站长统计功能的代码简单分析
PHP源代码数组统计count分析
php Notice: Undefined index 错误提示解决方法
PHP生成excel时单元格内换行问题的解决方法
php flv视频时间获取函数
php set_time_limit(0) 设置程序执行时间的函数
php date()日期时间函数详解
php下用cookie统计用户访问网页次数的代码
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
phpMyadmin 用户权限中英对照
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
php Smarty date_format [格式化时间日期]
Discuz 6.0+ 批量注册用户名
php 字符过滤类,用于过滤各类用户输入的数据
粗略计算在线时间,bug:ip相同