php下统计用户在线时间的一种尝试


Posted in PHP onAugust 26, 2010

下面列出几个比较常用的方法:

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

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 相关文章推荐
用文本作数据处理
Oct 09 PHP
?繁体转换的class
Oct 09 PHP
PHP 缓存实现代码及详细注释
May 16 PHP
PHP的5个安全措施小结
Jul 17 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
php发送与接收流文件的方法
Feb 11 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
完美的php分页类
Oct 24 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 #PHP
PHP下对字符串的递增运算代码
Aug 21 #PHP
深入理解PHP原理之异常机制
Aug 21 #PHP
php中var_export与var_dump的区别分析
Aug 21 #PHP
php visitFile()遍历指定文件夹函数
Aug 21 #PHP
php excel类 phpExcel使用方法介绍
Aug 21 #PHP
php下正则来匹配dede模板标签的代码
Aug 21 #PHP
You might like
phpmyadmin的#1251问题
2006/11/25 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
php的常量和变量实例详解
2017/06/27 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
js canvas实现5张图片合成一张图片
2019/07/15 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
初步讲解Python中的元组概念
2015/05/21 Python
深入理解Python3中的http.client模块
2017/03/29 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
HTML5边玩边学(2)基础绘图实现方法
2010/09/21 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
聘任证明怎么写
2015/03/02 职场文书
中标通知书
2015/04/17 职场文书
红色电影观后感
2015/06/18 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书