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实现用户在线时间统计详解相关推荐

  1. Coursera? EdX? 五大在线课程平台详解

    这里写自定义目录标题 1. Coursera? EdX? 五大在线课程平台详解 1.1. Coursera 1.2. EdX 1.3. Udemy 1.4. Udacity 1.5. Khan Aca ...

  2. pandas dataframe数据聚合groupby、agg、privot基于sum统计详解及实例

    pandas dataframe数据聚合groupby.agg.privot基于sum统计详解及实例 知道了sum.那么min.max.mean.median都是举一反三的事情了. 在日常的数据分析中 ...

  3. MySQL的用户密码过期功能详解

    MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...

  4. Linux用户与用户组配置文件详解

    Linux用户与用户组配置文件详解 出发点 Linux是一个多用户多任务的操作系统,用户需要使用系统,就必须在系统中拥有属于自己的账号. 作为一个Linux管理员,对用户增删改查等操作当然离不开用户与 ...

  5. mysql 获取当前整点_Oracle 生成未来三天的整点时间(步骤详解)

    需求:X坐标轴时间都为整点时间,展示未来三天内的预测(x轴展示未来三天的整点时间),每3个小时一个刻度,横坐标共计24个刻度 步骤一:取当前时间 SELECT SYSDATE FROM DUAL 步骤 ...

  6. CDH Hadoop 基于CM方式半在线安装步骤详解

    CDH Hadoop基于Cloudera Manager半在线方式安装详解 1 CM简介 Cloudera Manager是一个端到端的管理CDH集群的工具.它通过管理CDH集群(组件安装.服务管理. ...

  7. linux脚本日期时间,Linux 日期和时间操作详解

    Linux 日期和时间操作详解 发布时间:2012-11-27 15:10:07   作者:佚名   我要评论 Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Cl ...

  8. SQL Server时间粒度系列----第4节季、年时间粒度详解

    本文目录列表: 1.SQL Server季时间粒度 2.SQL Server年时间粒度 3.总结语 4.参考清单列表 SQL Serve季时间粒度   季时间粒度也即是季度时间粒度.一年每3个月是一个 ...

  9. TOEIC考试时间分配详解

    TOEIC考试时间分配详解 托业考试题全部为单项选择 涂答题卡 答错不扣分 除听力第二部分为3选1外其余皆为4选1 每一类题型前都会有详细的答题指引 考试时间 120分钟(45+75) 原始分换算为标 ...

最新文章

  1. docker 容器基本的操作
  2. C语言:在屏幕上打印杨辉三角形
  3. 【数字信号处理】周期延拓 ( 周期延拓的两种情况 | L ≥ N | L ≤ N )
  4. idea怎么提交到dev分支_IDEA设置git提交分支
  5. 使用PLSQL客户端登录ORACLE时报ORA-12502和ORA-12545错误的解决方案
  6. mysql sql组合_详解mysql 组合查询
  7. Unity 双击Asset后回调的实现
  8. 基于Cocos2d-x开发guardCarrot--6 《保卫萝卜2》解锁天天向上玩法
  9. 用户权限框架php,ThinkPHP5ACL用户权限模块用法详解
  10. CRM客户关系管理系统项目总结
  11. 用DIV+CSS技术设计的网上书城网页与实现制作(大一Web课程设计)
  12. 全球(全国)土地利用数据集获取大全/植被类型分布/NDVI数据/NPP数据/径流量数据/降雨量气温气象数据/蒸散量数据/太阳辐射数据
  13. 信息完全技术之Enigma密码机【MATLAB程序及软件APP实现】
  14. python中文件分类_利用Python将文件进行分类整理
  15. 怎么用计算机属性打开文件,鼠标双击打不开文件怎么办 鼠标双击变成属性的解决方法...
  16. 集万千优点于一身的Haproxy集群,你还不了解?
  17. 分别使用while、do-while和for循环输出1-1000中含有7或者7倍数的整数之和及个数-详解
  18. 微信小程序小Demo
  19. 设计模式 -- 简单工厂模式
  20. MATLAB坐标轴位置调整

热门文章

  1. antd 按需加载,antd定制主题,antd上传组件,在线换肤
  2. POWERPCB删除元件重新布板
  3. solidworks出现操作系统当前的配置不能运行此应用程序
  4. 师范物理考研换计算机需要报班么,东北师范大学凝聚态物理考研心路历程
  5. dsp广告和信息流广告区别_信息流、DSP、联盟广告、SEM有什么区别?
  6. python滚动截图(利用Puppeteer实现)
  7. ajax瀑布流布局,懒加载 瀑布流布局
  8. go语言接口并发量测试
  9. 【一键生成】3DMAX配景楼生成插件使用教程
  10. 机器学习VS深度学习