跟踪某人在网页上停留多长时间的最佳/最干净方法是什么?我知道Google Analytics会这样做,但我要求将数据存储在预设数据库中。
关于如何最好地解决这个问题的任何想法?
答案 0 :(得分:3)
您了解您无法知道该页面在浏览器中保持打开的时间长度,该人当前是否正在查看,或者已切换到浏览器或其他窗口中的其他标签?
这就是为什么,例如,论坛“当前连接的用户”列表是如此不精确。有时,他们会告诉您用户已连接,而此用户关闭浏览器并关闭PC几分钟。
您可以通过向您的服务器发送常规AJAX请求来获得近似值。这就是为什么,例如,基于Web的聊天应用程序更加精确,实际上可以显示实际连接的用户,因为他们更频繁地与服务器交换信息。
但值得吗?它会浪费您的带宽以及访问者的带宽。 有些访问者不喜欢以这种方式进行跟踪,并且会停止使用您的网站。此外,如果您将获得一些指标,它们仍然是不精确的。最后,衡量每天唯一身份访问者的数量和每位访问者的请求数量对于网站来说更为重要。
答案 1 :(得分:3)
我相信你可以在有人离开页面时触发JavaScript。如果你有一个在JavaScript中运行的计时器/计数器,它可以将值作为ajax发送到服务器,说它已经发布了多少秒。
我在这个解决方案中唯一不确定的是,如果所有浏览器都有时间在更改页面之前发送此ajax。
编辑:Here's an example关于此次活动。
如果此方法在某些浏览器中无效,请告知我们。
答案 2 :(得分:2)
对于那些感兴趣的人,我已经将一些工作放入一个小型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);
};
答案 3 :(得分:1)
您可以创建会话变量$ time,如果尚未设置则将其设置为零,如果已设置,则将该值取出并重置为 $ time = time();
$time = $_SESSION['time'] ;
if(!$time)
{
$_SESSION['time'] = 0;
}else {
if($time != 0)
$timeSpentByUserOnPage = time() - $time;
$_SESSION['time'] = time();
}