2013-03-21 38 views
4

如何在用户请求另一个用户之前停留在页面上多长时间?或者直接离开该网站?跟踪用户在页面上停留的时间?

基本上,我想要做一个检查,如果用户停留在页面上20分钟或更长的时间,然后做一些事情。

我相信这将需要PHP和JavaScript,但我不完全知道如何完成它。

也许在php中使用这个$_SERVER来获得执行时间,然后得到一个时间戳,当用户单击其他地方,并简单地比较两者?

+1

这可能会有所帮助:http://stackoverflow.com/a/3893491/235710 – 2013-03-21 21:29:48

+0

你可以安装谷歌分析 – 2013-03-21 21:41:54

+2

你能更具体地说明“做某事”的含义吗?请记住,自从他们加载你的页面以来,时间流逝*并不关联他们已经*查看你的页面的时间。我在浏览器中打开了标签,我几个小时都没看过。 – 2013-03-21 21:56:09

回答

6

你可以用简单的JavaScript做到这一切。
对于单页:

window.setTimeout(function(){ 
// Do stuff after 20 minutes of loading the page 
// Then using jQuery you can call a PHP script to do stuff like so: 
$.ajax({ 
    url: '/myScript.php', 
    method: 'POST', 
    success: function(result){ 
     //The request was successful and the output is stored in a variable: result 
    }, 
    complete: function(){ 
     //Do stuff when the request is completed (Ignores if success or not) 
    }, 
    beforeSend: function(){ 
     //Do something before the request is sent 
    } 
}); 
}, 20 * 60 * 1000); //This is in milliseconds that's why I use the equation 


对于多页:
我建议你设置一个用户点击一个页面,上如果cookie存在的每个页面检查时的cookie。如果存在,则每隔x秒钟执行一次查询,以查看自创建cookie以来20分钟是否已经过去。


对于全阿贾克斯的文件头:http://api.jquery.com/jQuery.ajax/

+1

如果20分钟过去了,我需要使用php。不是在PHP中,那么我将如何使用你的代码去做这件事? – Maaz 2013-03-21 21:32:26

+2

您使用Ajax请求。我会更新答案给你,所以这很明确:) – 2013-03-21 21:33:45

+0

也请记住标记为回答:) – 2013-03-22 20:52:56

0

我已经把一些工作成一个小的JavaScript库和服务,次用户在网页上多久。它具有更准确(不完美)追加用户实际与页面进行交互的时间长度的额外好处。它忽略了用户切换到不同标签页,闲置,最小化浏览器等的时间。Google Analytics方法有一个缺点(据我了解),它只会检查您的域处理新请求的时间,而不是始终准确。它不考虑,如果有人不再查看网页,已经最小化浏览器,自去年加载你的页面切换选项卡以3个不同的网页等

仅供参考 - 无解的是完美的。但希望这个提供价值。您可以实施Javaacript API并自行收集统计信息,也可以使用完全为您提供的服务。

http://timemejs.com

其用法的例子:

包括在你的页面:

<script src="https://timemejs.com/timeme.min.js"></script> 
<script type="text/javascript"> 
TimeMe.initialize({ 
    currentPageName: "home-page", // page name 
    idleTimeoutInSeconds: 15 // time before user considered idle 
}); 
</script> 

如果你想自己的时间报告给后端:

xmlhttp=new XMLHttpRequest(); 
xmlhttp.open("POST","ENTER_URL_HERE",true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); 
xmlhttp.send(timeSpentOnPage); 

TimeMe.js也支持通过WebSockets的发送时间的数据,所以你不必试图迫使一个完整的HTTP请求到document.onbeforeunload事件。

+0

timemejs的网址不工作(了)。它没有https。 – marlar 2017-02-28 16:34:47

+0

谢谢!我已经修复了这个链接。 – 2017-03-04 13:53:40