一直以来,在web开发中,准确统计用户在线时间都是一个老大难的问题,虽然已经有很多人去尝试各种不同的方案,可是毕竟项目不同,所用到的方法也是千差万别,下面列出几个比较常用的方法:
首先介绍一下所涉及的数据表结构,四个字段:
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环境下统计用户在线时间的尝试进行讨论。 首先,介绍所涉及的数据表结构。一般来说,需要记录以下字段:uid、session_id、login_time和logout_time。其中,uid是用户ID,...
`Session`是ASP.NET提供的一种服务器端存储机制,它为每个用户分配一个唯一的ID(SessionID),并将这个ID通过cookie或URL重写返回给客户端。当用户后续请求到达时,服务器通过SessionID找到对应的会话数据,从而...
在.NET C#开发中,`Session`是一种常用的技术,用于在服务器端存储用户特定的数据,以便在用户与网站交互期间保持状态。在这个场景中,我们关注的是如何利用`Session`来控制用户的重复登录以及统计在线用户数量。...
用户离开系统的方式有三种:主动注销、会话超时、直接关闭浏览器,对于前两种,我们很容易便可将该用户从在线列表中清除,关键是第三种(很多用户都是直接关闭窗口的~~郁闷ing),程序无法捕获窗口关闭的精确时间,...
圆形统计图(Pie Chart)是一种常用的数据展示方式,通常用于表示部分与整体之间的比例关系。在小程序中,我们可以利用诸如`wx-charts`这样的第三方图表库来创建圆形统计图。`wx-charts`是专为微信小程序设计的图表...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要在用户端运行,用于控制网页的行为。在本文中,我们将探讨如何使用JavaScript实现简单的网站访问量统计功能。虽然这种方法可能不如专业统计工具如...
代码行数(LOC,Lines of Code)通常作为项目规模的一种度量标准,虽然不完全代表代码质量或复杂性,但却是评估工作量的基础。例如,在项目初期,可以预测项目所需的工作时间或资源;在项目执行中,通过对比计划与...
1. **多语言支持**:源代码统计器覆盖了多种主流编程语言,确保无论你处理的是哪种语言的代码库,都能得到准确的统计结果。这对于多语言项目或者跨平台开发团队来说尤其重要,因为它可以提供一个统一的度量标准。 2...
在构建一个预测模型来预测用户注册网站的统计模型网页设计时,我们需要综合运用多种IT技术和数据分析方法。这个项目的核心目标是通过收集、分析用户数据,建立一个能够预测用户注册行为的模型,以便优化网站设计,...
统计建模是通过数学模型来描述和分析数据的一种方法,它涵盖了各种模型,如线性回归、逻辑回归、时间序列分析等。这些模型能够帮助我们识别变量之间的关系,预测未知结果,以及评估模型的性能。 Python中的统计建模...
3. **时间轴展示**:支出的时间轴视图是"现金流量"的一大亮点,用户可以清晰地看到每个月、甚至每一天的花费情况,时间维度的可视化帮助用户识别消费习惯,找出可能存在的浪费。 4. **支出明细报告**:通过对输入...
"hadoop流量统计程序"是基于Hadoop平台设计的一种工具,用于收集、处理和分析网络流量数据。这个程序能够帮助网络管理员或者数据分析人员有效地监控和理解网络活动,识别潜在的流量异常,以及优化网络资源的分配。 ...
PHP作为一种流行的服务器端脚本语言,提供了一种简单的方法来实现在线用户统计。本文详细介绍了使用PHP简单统计在线人数的方法,主要包含以下知识点: 1. 文件操作:PHP中的文件操作包括读取、写入以及文件锁定等。...
在iOS开发中,为了对用户行为进行深度分析和优化应用体验,统计用户事件是一个至关重要的环节。本项目提供了一个专门用于记录和管理用户事件的类库,它将这些事件数据首先存储在SQLite数据库中,然后根据需要上传到...
微信小程序是腾讯公司推出的一种无需安装即可使用的应用,它实现了“触手可及”的梦想,用户扫一扫或搜一下就能打开应用。这款“专注管理时间”的小程序正是基于这一理念,为用户提供了一个便捷的时间管理工具。 小...
8. **性能优化**:延迟加载(Lazy Loading)是一种策略,只在图片进入视口时才加载,以减少首屏加载时间。对于大型网站,这可以显著提升页面性能。 9. **SEO优化**:虽然Banner主要是视觉元素,但其alt属性对搜索...
Cookie是一种小型文本文件,网站可以通过它保存和读取用户的某些信息。在这个案例中,使用了Cookie来记录每位访客的访问次数。具体实现包括: 1. **设置Cookie**:通过`setCookie`函数将访问次数保存到名为...
【时间序列预测】是统计分析中的一个重要领域,主要用于分析按照时间顺序排列的数据,例如历史销售数据、股票价格或天气变化等。在SAS软件中,时间序列预测主要通过SAS/ETS(Economic Time Series)包来实现。时间...
在现代社会中,Excel与SPSS作为两大重要的软件工具,各自在办公...对于那些既需要办公软件处理日常任务,又需要进行深入数据统计分析的专业人士而言,掌握这两种软件的联合使用,无疑是提升个人竞争力的一个重要途径。