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 相关文章推荐
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
php短信接口代码
May 13 PHP
php简单截取字符串代码示例
Oct 19 PHP
PHP读取大文件的几种方法介绍
Oct 27 PHP
php事务回滚简单实现方法示例
Mar 28 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
Apr 07 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
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
javascript,jquery闭包概念分析
2010/06/19 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
2018/07/26 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
利用Psyco提升Python运行速度
2014/12/24 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python+django+rest框架配置创建方法
2019/08/31 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
大整数数相乘的问题
2012/07/22 面试题
如何利用find命令查找文件
2016/11/18 面试题
本科毕业生的求职信范文
2013/11/20 职场文书
三年级小学生评语
2014/04/22 职场文书
商超业务员岗位职责
2015/02/13 职场文书
导游词之阆中古城
2019/12/23 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫