记录用户使用PHP查看页面多长时间的最简单方法是什么?

问题描述:

跟踪某人在页面上停留多长时间的最佳/最干净的方法是什么?我知道Google Analytics会这样做,但我需要将数据本地存储在预设数据库中。记录用户使用PHP查看页面多长时间的最简单方法是什么?

任何想法如何最好地去做这件事?

+0

你不能用PHP做到这一点。当用户导航时,您需要一些通知服务器端的JavaScript。 – ZeissS

你知道你不知道在浏览器中页面保持打开多长时间,也不知道该人目前正在查看它还是切换到浏览器或其他窗口中的另一个选项卡?

这就是为什么,例如,论坛“目前连接的用户”名单是如此不准确。有时,他们会告诉您用户已连接,而此用户关闭浏览器并关闭电脑几分钟。

您可以通过向您的服务器发送常规AJAX请求的近似值。这就是为什么,例如,基于网络的聊天应用程序更加精确,并且实际上可以或多或少地显示实际连接的用户,因为他们更频繁地与服务器交换信息。

但它值得吗?它会浪费你的带宽和你的访问者的带宽。 有些访客讨厌以这种方式跟踪,并会停止使用您的网站。另外,如果您将获得一些指标,它们仍然不准确。最后,衡量每日唯一身份访问者数量和每位访问者的请求数量对于网站来说更为重要。

+0

如果用户关注此页面,您可以使用JavaScript函数和事件进行跟踪,因此有可能确定用户是否获得了该页面的焦点。 –

+0

@Robin Castlin:想象我正在读你的博客,我也想听一些音乐。所以我把你的博客全屏,我专注于操纵媒体播放器。你相信我离开了,而我还在这里,实际上正在读你的博客。现在,我再次转到您的博客,但我的联系已关闭。因此,我正在阅读一个小时,但您相信我在一小时前离开了您的网站。同样,正如我所说的,我们可以有一个近似值,但Web应用程序的沙盒模型使得不可能知道用户现在正在做什么。希望。 –

+0

+1“有些访问者讨厌以这种方式跟踪” – Herbert

我相信你可以在某人离开某个页面时触发JavaScript。如果你有一个以JavaScript运行的定时器/计数器,它可以将该值作为ajax发送给服务器,并说明它已发布多少秒。

在这个解决方案中我唯一不确定的是如果所有的浏览器都有时间在它们改变页面之前发送这个ajax。

编辑:Here's an example的事件。

如果此方法在某些浏览器中无效,请让我知道。

好吧继承人一种方式在PHP中做到这一点,因为 有人查看页面=两个HTTP请求之间的时间。

您可以创建会话变量$ time,如果它尚未设置,则将其设置为零,如果已设置,则将该值取出并将其重置为 $ time = time();

$time = $_SESSION['time'] ; 
if(!$time) 
{ 
$_SESSION['time'] = 0; 
}else { 
if($time != 0) 
$timeSpentByUserOnPage = time() - $time; 

$_SESSION['time'] = time(); 

}

对于那些有兴趣,我已经把一些工作,到该时间有多长,用户与网页交互的小JavaScript库。它具有更准确(不完美)追加用户实际与页面进行交互的时间长度的额外好处。它忽略了用户切换到不同标签,空闲,最小化浏览器等的时间。

无可否认,正如MainMa建议的那样 - 有些用户可能不喜欢这种级别的跟踪。

https://github.com/jasonzissman/TimeMe.js

其用法的例子:

在加载你的页面:

document.onload = function() { 
    TimeMe.setIdleDurationInSeconds(30); 
    TimeMe.setCurrentPageName("my-home-page"); 
    TimeMe.initialize(); 
} 

检索花费在网页上的时间,并将其发送到您的服务器,当用户离开你的页面:

window.onbeforeunload = function (event) { 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open("POST","ENTER_URL_HERE",false); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); 
    xmlhttp.send(timeSpentOnPage); 
};