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 相关文章推荐
PHP+JS无限级可伸缩菜单详解(简单易懂)
Jan 02 PHP
php Undefined index和Undefined variable的解决方法
Mar 27 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
php创建sprite
Feb 11 PHP
thinkphp普通查询与表达式查询实例分析
Nov 24 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
Yii1.1中通过Sql查询进行的分页操作方法
Mar 16 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 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
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
用JavaScript和注册表脚本实现右键收藏Web页选中文本
2007/01/28 Javascript
通过隐藏option实现select的联动效果
2009/11/10 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
JS中数组重排序方法
2016/11/11 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
p5.js临摹动态图形实现方法详解
2019/10/23 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
[01:34]2016国际邀请赛中国区预选赛IG战队教练采访
2016/06/27 DOTA
python unittest实现api自动化测试
2018/04/04 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
关于母亲节的感言
2014/02/04 职场文书
班委竞选演讲稿
2014/04/28 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
Python 阶乘详解
2021/10/05 Python