php下统计用户在线时间的一种尝试_php技巧

下面列出几个比较常用的方法:

首先介绍一下所涉及的数据表结构,四个字段:

复制代码 代码如下:

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);
}

这种方法的优点是相对来说实现起来比较简单,能够适用于大多数的网站,没有额外的服务器需求,而且也可以比较准确的统计用户的在线时间。
缺点也很明显,增加了数据库的更新操作,增加了系统的负载,不过对于中小型网站来说应该不是问题。

时间: 2024-07-28 20:58:38

php下统计用户在线时间的一种尝试_php技巧的相关文章

PHP中对用户身份认证实现两种方法_php技巧

当访问者浏览受保护页面时,客户端浏览器会弹出对话窗口要求用户输入用户名和密码,对用户的身份进行验证,以决定用户是否有权访问页面.下面用两种方法来说明其实现原理. 一.用HTTP标头来实现 标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串.HTTP采用一种挑战/响应模式对试图进入受密码保护区域的用户进行身份验证.具体来说,当用户首次向WEB服务器发出访问受保护区域的请求时,挑战进程被启动,服务器返回特殊的401标头,表明该用户身份未经验证.客户端浏览器在检测到上述响应之后自动弹出对

用户在线时间最多的20个网站

一个用户在网站上停留时间(在线时间)的长短,反应出一个网站的粘度和吸引用户的能力,那么,人们最喜欢在哪些网站上停留呢?Jay Meattle给出了一组数据,显示了美国用户访问时间最长的20个网站,根据他的数据,这20个网站竟然拥有所有美国用户39%的访问时间,这些信息对于喜欢看英文内容的读者具有一定价值.下面是我翻译的译文. 时间是有限的资源,尽管我们不愿意承认,我们每天都只有24小时的时间去做事情.在2006年的12月,我们有44640分钟去做我们心中想要做的事情,不管是睡觉.吃饭.看电视.跳

记录用户在线时间

前言 同事在弄一个叫学习空间的系统,其中需要记录用户的在线时间,于是我就帮忙实现一下,那个系统的其他部分都没参与过.不过功能实现得还可以,就小结一下也看看能不能有更好的解决方法.   正文 思路:在页面加载和卸载时的把当前时刻发送到服务器,服务器端用链表保存并且该链表保存在Session中,但Session过期时检索该链表获取最小和最大值并相减,那就得到了用户在线时间了. 前提:Session mode要设为 InProc,不然永不过期哦! 下面是具体实现例子: 目录结构 RecordTime用

php实现用户在线时间统计详解_php技巧

首先介绍一下所涉及的数据表结构,四个字段: 代码如下: 复制代码 代码如下: 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

js统计网页在线时间的脚本_AJAX相关

每xxxxx毫秒检测一次是否在线, TR_COUNT次之后设定改用户为假死状态(即不在当前页面活动,afk..) 当页面关闭时把停留时间送出, /**//* ---------------------------------------------------------------------------- * Script Name: online.js * Last Modified: 2008-4-13 22:25 * Author: meyu * Copyright (c) 2008

js统计网页在线时间的脚本

每xxxxx毫秒检测一次是否在线, TR_COUNT次之后设定改用户为假死状态(即不在当前页面活动,afk..) 当页面关闭时把停留时间送出, /**//* ---------------------------------------------------------------------------- * Script Name: online.js * Last Modified: 2008-4-13 22:25 * Author: meyu * Copyright (c) 2008

asp.net 用户在线退出更新实现代码_实用技巧

最主要的问题是关闭浏览器的时候如何更新用户在线列表 网上流传的方法是不停的ajax异步发送请求,当不再请求的时候就可以判断用户已经关闭浏览器 复制代码 代码如下: var x=0; function myRefresh() { var httpRequest = new ActiveXObject("microsoft.xmlhttp"); httpRequest.open("GET", "test.aspx", false); httpRequ

用PHP控制用户的浏览器--ob*函数的使用说明_php技巧

用PHP控制用户的浏览器--ob*函数的使用 /google 的广告条--> Output Control 函数可以让你自由控制脚本中数据的输出.它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况.输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用. 我们先举一个简单的例子,让大家对Output Control有一个大致的印象:Example 1. <?php ob_st

Facebook广告营收增速比用户在线时间还要多

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 [摘要]美国成人只将6%的时间花费在Facebook上,但后者却有近10%的广告收入. 腾讯科技讯 9月21日,据市场研究公司eMarketer的最新统计数据显示,在2014年,美国成年人平均每天在Facebook上花费21分钟时间.这21分钟约占美国成年人每天花费在所有社交网络上的时间的三分之一;约占他们每天花费在数字媒体上的时间的6%;约占他们每天花费在所有媒体上的时间的2.8%.eMarketer公司预计,在2014年,美国成年人平均