【发布时间】:2011-11-18 16:34:15
【问题描述】:
有没有什么简单的方法可以监控用户浏览页面的时长?
Google Analytics 通过允许您查看您的网站访问者在特定页面上停留的时间来使用此功能。像这样的东西可以用 PHP 或 JavaScript 复制吗?
【问题讨论】:
标签: php javascript monitoring pageviews
有没有什么简单的方法可以监控用户浏览页面的时长?
Google Analytics 通过允许您查看您的网站访问者在特定页面上停留的时间来使用此功能。像这样的东西可以用 PHP 或 JavaScript 复制吗?
【问题讨论】:
标签: php javascript monitoring pageviews
是的,这很容易。只需在页面加载时启动计时器,并在用户离开页面时将其发送到某个服务器脚本进行记录。
触发页面离开事件读取here。
示例客户端代码:
<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>
您的服务器端脚本位于 your-tracking-server.com/track.php:
...
mysql_query('INSERT INTO track_visit_time (url, time) VALUES ("'.myescape($_GET['track_url']).'", '.float($_GET['visit_time']).')');
...
请注意,客户端没有经过测试,也根本没有跨浏览器。服务器端使用了已弃用的函数 mysql_query。
【讨论】:
myescape() 功能代码? $5 表示您以某种形式对 SQL 注入持开放态度。
执行此操作的常用方法是简单地测量一次页面浏览与下一次浏览之间的时间。不过,这有很多“陷阱”!
要解决这些问题,另一种常用方法是轮询服务器。您可以通过长轮询(连接保持打开状态,一分钟左右没有数据传输,然后立即建立另一个连接)或每 5 秒左右重复访问您的服务器来执行此操作。我推荐使用长轮询方法,因为它占用的带宽要少得多。
【讨论】:
您可以在控制器环境中执行此操作,如果用户正在查看特定网页(以及在哪里),他们的眼睛会被跟踪。如果您将浏览器内跟踪仅用于常见的事情,例如用户接到电话或切换到其他标签以及我们每天在打开浏览器时所做的所有事情,这通常有助于消除问题。
【讨论】:
我认为您可以尝试使用 window.onbeforeunload 方法来触发 ajax 调用。当页面加载时,记录时间,当它卸载时,使用 ajax 将经过的时间发送到您的服务器。该页面显然永远不会看到响应,但这并不重要。
正如布拉德指出的那样,这有点不可靠。另一种方法是每隔几秒更新一次服务器。您还应该将间隔时间的一半添加到经过的时间,以考虑到上次更新和用户离开之间的平均时间。例如,如果您每 10 秒更新一次,而最后一次更新是 40 秒,则假设它们存在 45 秒。这涵盖了 40.0 秒到 49.999 秒之间未记录的情况。
【讨论】:
onbeforeunload 事件不可靠吗?