Php 如何在站点上跟踪用户时间
我希望跟踪用户在网站上的平均时间(与Google analytics相同),以便进行内部管理Php 如何在站点上跟踪用户时间,php,jquery,codeigniter,analytics,Php,Jquery,Codeigniter,Analytics,我希望跟踪用户在网站上的平均时间(与Google analytics相同),以便进行内部管理 最简单的方法是什么?我能想到的主要方法是: 当用户第一次点击一个页面时,您可以记录(比如)他们的IP地址、加载的页面和时间。然后,使用一些Javascript和AJAX,当它们离开页面时,您可以使用unload事件发送到AJAX处理程序,该处理程序记录页面和它们离开的时间 除了会话之外,您还需要使用某种ID来存储页面访问。假设我打开了5个主页实例,你会想分别记录每个实例。比如说: 访问页面,生成代码(比
最简单的方法是什么?我能想到的主要方法是: 当用户第一次点击一个页面时,您可以记录(比如)他们的IP地址、加载的页面和时间。然后,使用一些Javascript和AJAX,当它们离开页面时,您可以使用
unload
事件发送到AJAX处理程序,该处理程序记录页面和它们离开的时间
除了会话之外,您还需要使用某种ID来存储页面访问。假设我打开了5个主页实例,你会想分别记录每个实例。比如说:
index.php
code:2345
)如果他们再次访问
index.php
,您将生成另一个代码,例如,36789
。使用生成随机GUID的方法是最好的,因此您可以(基本上)忽略相同IP/页面/代码组合上发生冲突的任何可能性。您可以通过以下方式获得时间:
<!DOCTYPE html>
<html>
<head>
<title>Collect time</title>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(function()
{
var start = null;
$(window).load(function(event) {
start = event.timeStamp;
});
$(window).unload(function(event) {
var time = event.timeStamp - start;
$.post('/collect-user-time/ajax-backend.php', {time: time});
})
});
</script>
</head>
<body>
</body>
</html>
收集时间
$(函数()
{
var start=null;
$(窗口)。加载(函数(事件){
开始=event.timeStamp;
});
$(窗口)。卸载(函数(事件){
var time=event.timeStamp-start;
$.post('/collect user time/ajax backend.php',{time:time});
})
});
和后端脚本:
<?php
$time = intval($_POST['time']);
if (!file_exists('data.txt')) {
file_put_contents('data.txt', $time . "\n");
} else {
file_put_contents('data.txt', $time . "\n", FILE_APPEND);
}
使用PHP确实没有一种有效的方法,因为PHP是服务器端的,无法确定页面何时关闭。您需要使用javascript来确定这一点
我要做的是使用javascript在window.onload
上启动计时器,然后在window.onunload
上结束计时器。然后您可以存储数据并对其执行所需操作。$(窗口)。卸载是跟踪用户离开页面的一个非常好的功能
但有一点是,当窗口卸载发送ajax时,它现在可以工作了,当用户离开页面时,ajax还没有完成。所以您需要向ajax添加一个属性(async:false),代码如下:
$.ajax({
type: 'POST',
async: false,
url: '/collect-user-time/ajax-backend.php',
data: {time: time}
});
对web和移动浏览器使用JS。它准确地跟踪现场时间
<script type="text/javascript">
var Tos;
(function(d, s, id, file) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.onload = function() {
var config = {
trackBy: 'seconds'
};
if (TimeOnSiteTracker) {
Tos = new TimeOnSiteTracker(config);
}
};
js.src = file;fjs.parentNode.insertBefore(js, fjs);
} (document, 'script', 'TimeOnSiteTracker', 'timeonsitetracker.min.js'));
</script>
var-Tos;
(功能(d、s、id、文件){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id))返回;
js=d.createElement;
js.id=id;
js.onload=function(){
变量配置={
追踪者:“秒”
};
if(TimeOnSiteTracker){
Tos=新的TimeOnSiteTracker(配置);
}
};
js.src=file;fjs.parentNode.insertBefore(js,fjs);
}(文档“script”、“TimeOnSiteTracker”、“TimeOnSiteTracker.min.js”);
在页面末尾,调用
<script>
Tos.getTimeOnPage();
//Response ->
{
TOSId: 1129620185532,
TOSSessionKey: "14802525481391382263",
TOSUserId: "anonymous",
title: "Test application - TimeOnSiteTracker",
URL: "http://tos-localdata.chennai/home.php"
entryTime: "2016-11-27 13:15:48.663",
currentTime: "2016-11-27 13:17:31.663",
timeOnPage: 103,
timeOnSite: 0,
timeOnPageTrackedBy: "second",
timeOnPageByDuration: "0d 00h 01m 43s",
timeOnSiteByDuration: "0d 00h 00m 00s",
trackingType: "tos",
}
</script>
Tos.getTimeOnPage();
//答复->
{
TOSId:1129620185532,
按键:“14802525481391382263”,
TOSUserId:“匿名”,
标题:“测试应用程序-TimeOnSiteTracker”,
URL:“http://tos-localdata.chennai/home.php"
进场时间:“2016-11-27 13:15:48.663”,
当前时间:“2016-11-27 13:17:31.663”,
时间首页:103,
现场时间:0,
timeOnPageTrackedBy:“秒”,
timeOnPageByDuration:“0d 00h 01m 43s”,
timeOnSiteByDuration:“0d 00h 00m 00s”,
跟踪类型:“tos”,
}
就这么简单,
甚至在IPhone、IPad、mobile Safari等不支持Windows.unload()事件的移动浏览器中,它似乎也能正常工作。你不能使用谷歌分析数据吗?已经有十几个软件包可以这样做了。如果没有必要,不要重新发明轮子。看看webalizer、awstats、urchin等,这实际上是一个非常重要的问题。定义“站点时间”需要做出一些假设,因为您只知道浏览器何时请求内容,而不知道用户何时关闭窗口、导航到远程站点等。我们提供了一个工作板,允许管理员进入并控制用户群的特定部分,我们想为他们提供管理分析。如果Opera浏览器卸载事件不起作用,你会怎么做?@DimaKrasun我不知道这会是个问题。虽然它在所有浏览器中都受支持,但我对Opera一点也不感兴趣。每天学习新的东西。太棒了,谢谢你的帮助-如果你有时间写一个快速的脚本,我很想看看?我可以在整个域上使用page.unload吗?等等,我开始编写脚本很多次ajax调用都不起作用。。在发送ajax请求之前,正在进行页面卸载。所以无法多次存储离开时间