php 统计用户使用时间,php下统计用户在线时间的几种方法

41528d3028836879cd698677c3999917.gifphp下统计用户在线时间的几种方法

一直以来,在 web 开发中,准确统计用户在线时间都是一个老大难的问题,虽然已经有很 多人去尝试各种不同的方案,可是毕竟项目不同,所用到的方法也是千差万别 下面列出几个比较常用的方法: 首先介绍一下所涉及的数据表结构,四个字段: uid :用户 id session_id :用户登录后系统产生的 session_id,PHP 可是使用 session_id() 函 数获取 login_time :登录时间 logout_time :登出时间 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); } 这种方法的优点是相对来说实现起来比较简单,能够适用于大多数的网站,没有额外的服 务器需求,而且也可以比较准确的统计用户的在线时间。 缺点也很明显,增加了数据库的更新操作,增加了系统的负载,不过对于中小型网站来说 应该不是问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值