2011-11-18 49 views
1

有没有简单的方法可以监控用户浏览页面的时间?监控页面查看次数

谷歌Analytics(分析)使用此功能可让您查看您的网站访问者在特定页面上停留的时间。像这样的东西能用PHP或JavaScript重现吗?

回答

2

是的,这很容易。只需在页面加载时启动计时器,并在用户离开页面时将其发送给某个服务器脚本进行记录。

要激发页面离开事件阅读here

实例的客户端代码:在your-tracking-server.com/track.php

<html> 
... 
<script> 
var visit_start_time_ms = (new Date).getTime(); 
window.onbeforeunload = function() { 
    var visit_time = (new Date).getTime() - visit_start_time_ms; 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open("GET","http://your-tracking-server.com/track.php?track_url=...&visit_time=" + visit_time,true); 
    xmlhttp.send(); 
}; 
</script> 
... 
</html> 

你的服务器端脚本:

... 
mysql_query('INSERT INTO track_visit_time (url, time) VALUES ("'.myescape($_GET['track_url']).'", '.float($_GET['visit_time']).')'); 
... 

记住,客户端不测试而不是交叉浏览器。服务器端使用不推荐使用的函数mysql_query。

+0

小心显示你的myescape()函数代码? 5美元表示您可以以某种形式开放SQL注入。 – Brad

+0

这是我的想象功能。我使用PDO并在我所有的项目中准备了语​​句。感谢专心。 – Oroboros102

0

我想你可以尝试使用window.onbeforeunload方法来触发ajax调用。加载页面时,记录时间,卸载时间,使用ajax将已用时间发送到服务器。该页面显然永远不会看到回应,但无论如何这并不重要。

正如布拉德指出的那样,这有点不可靠。另一种方法是每隔几秒更新一次服务器的时间。您应该为经过的时间添加一半的时间间隔,以平均计算上次更新和离开用户之间的时间。例如,如果每10秒更新一次,而最后一次更新的时间为40秒,则假设他们有45秒。这涵盖了40.0秒到49.999秒之间没有被记录的情况。

+0

小心,这样的请求很少起作用。 – Brad

+0

@Brad我目前正在调查这件事,看看我能否改进答案。 – Tesserex

+0

@布拉德:你为什么这么说? 'onbeforeunload'事件不可靠吗? – xbonez

1

这样做的一种常见方法是简单地测量一个页面视图和下一个页面视图之间的时间。虽然有很多“陷阱”!

  • 你不知道的时候加载的最后一页
  • 你不知道时间反弹
  • 问题的发生是多标签并没有什么
  • 不是有人留在您的网页上4个小时,还是关闭了浏览器然后回来?

为了解决这些问题,另一种常见的方法是轮询服务器。您可以通过长轮询(连接保持打开状态,一分钟左右没有数据传输,然后立即建立另一个连接)或每5秒左右重复点击一次到您的服务器来完成此操作。我建议使用长轮询方法,因为它的带宽密集程度要低得多。

0

您可以在控制器环境中执行此操作,如果用户在特定网页(和位置)上查看用户眼睛,那么该用户眼睛会被跟踪。如果您仅将浏览器内的跟踪用于常见的事情,例如用户正在接听电话或切换到其他选项卡,以及在浏览器打开时我们每天所做的所有事情,那么这通常可用于消除问题。