php实现用户在线时间统计详解
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);
}
这种方法的优点是相对来说实现起来比较简单,能够适用于大多数的网站,没有额外的服务器需求,而且也可以比较准确的统计用户的在线时间。
缺点也很明显,增加了数据库的更新操作,增加了系统的负载
MYSQL存储session信息的table:
uid<int(10)> :用户id
session_id<varchar(40)> :用户登录后系统产生的session_id
login_time<int(10)> :登录时间
logout_time<int(10)> :登出时间
php实现用户在线时间统计详解相关推荐
- Coursera? EdX? 五大在线课程平台详解
这里写自定义目录标题 1. Coursera? EdX? 五大在线课程平台详解 1.1. Coursera 1.2. EdX 1.3. Udemy 1.4. Udacity 1.5. Khan Aca ...
- pandas dataframe数据聚合groupby、agg、privot基于sum统计详解及实例
pandas dataframe数据聚合groupby.agg.privot基于sum统计详解及实例 知道了sum.那么min.max.mean.median都是举一反三的事情了. 在日常的数据分析中 ...
- MySQL的用户密码过期功能详解
MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...
- Linux用户与用户组配置文件详解
Linux用户与用户组配置文件详解 出发点 Linux是一个多用户多任务的操作系统,用户需要使用系统,就必须在系统中拥有属于自己的账号. 作为一个Linux管理员,对用户增删改查等操作当然离不开用户与 ...
- mysql 获取当前整点_Oracle 生成未来三天的整点时间(步骤详解)
需求:X坐标轴时间都为整点时间,展示未来三天内的预测(x轴展示未来三天的整点时间),每3个小时一个刻度,横坐标共计24个刻度 步骤一:取当前时间 SELECT SYSDATE FROM DUAL 步骤 ...
- CDH Hadoop 基于CM方式半在线安装步骤详解
CDH Hadoop基于Cloudera Manager半在线方式安装详解 1 CM简介 Cloudera Manager是一个端到端的管理CDH集群的工具.它通过管理CDH集群(组件安装.服务管理. ...
- linux脚本日期时间,Linux 日期和时间操作详解
Linux 日期和时间操作详解 发布时间:2012-11-27 15:10:07 作者:佚名 我要评论 Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Cl ...
- SQL Server时间粒度系列----第4节季、年时间粒度详解
本文目录列表: 1.SQL Server季时间粒度 2.SQL Server年时间粒度 3.总结语 4.参考清单列表 SQL Serve季时间粒度 季时间粒度也即是季度时间粒度.一年每3个月是一个 ...
- TOEIC考试时间分配详解
TOEIC考试时间分配详解 托业考试题全部为单项选择 涂答题卡 答错不扣分 除听力第二部分为3选1外其余皆为4选1 每一类题型前都会有详细的答题指引 考试时间 120分钟(45+75) 原始分换算为标 ...
最新文章
- docker 容器基本的操作
- C语言:在屏幕上打印杨辉三角形
- 【数字信号处理】周期延拓 ( 周期延拓的两种情况 | L ≥ N | L ≤ N )
- idea怎么提交到dev分支_IDEA设置git提交分支
- 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
- mysql sql组合_详解mysql 组合查询
- Unity 双击Asset后回调的实现
- 基于Cocos2d-x开发guardCarrot--6 《保卫萝卜2》解锁天天向上玩法
- 用户权限框架php,ThinkPHP5ACL用户权限模块用法详解
- CRM客户关系管理系统项目总结
- 用DIV+CSS技术设计的网上书城网页与实现制作(大一Web课程设计)
- 全球(全国)土地利用数据集获取大全/植被类型分布/NDVI数据/NPP数据/径流量数据/降雨量气温气象数据/蒸散量数据/太阳辐射数据
- 信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
- python中文件分类_利用Python将文件进行分类整理
- 怎么用计算机属性打开文件,鼠标双击打不开文件怎么办 鼠标双击变成属性的解决方法...
- 集万千优点于一身的Haproxy集群,你还不了解?
- 分别使用while、do-while和for循环输出1-1000中含有7或者7倍数的整数之和及个数-详解
- 微信小程序小Demo
- 设计模式 -- 简单工厂模式
- MATLAB坐标轴位置调整