Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在站点上跟踪用户时间_Php_Jquery_Codeigniter_Analytics - Fatal编程技术网

Php 如何在站点上跟踪用户时间

Php 如何在站点上跟踪用户时间,php,jquery,codeigniter,analytics,Php,Jquery,Codeigniter,Analytics,我希望跟踪用户在网站上的平均时间(与Google analytics相同),以便进行内部管理 最简单的方法是什么?我能想到的主要方法是: 当用户第一次点击一个页面时,您可以记录(比如)他们的IP地址、加载的页面和时间。然后,使用一些Javascript和AJAX,当它们离开页面时,您可以使用unload事件发送到AJAX处理程序,该处理程序记录页面和它们离开的时间 除了会话之外,您还需要使用某种ID来存储页面访问。假设我打开了5个主页实例,你会想分别记录每个实例。比如说: 访问页面,生成代码(比

我希望跟踪用户在网站上的平均时间(与Google analytics相同),以便进行内部管理


最简单的方法是什么?我能想到的主要方法是:

当用户第一次点击一个页面时,您可以记录(比如)他们的IP地址、加载的页面和时间。然后,使用一些Javascript和AJAX,当它们离开页面时,您可以使用
unload
事件发送到AJAX处理程序,该处理程序记录页面和它们离开的时间

除了会话之外,您还需要使用某种ID来存储页面访问。假设我打开了5个主页实例,你会想分别记录每个实例。比如说:

  • 访问页面,生成代码(比如页面:
    index.php
    code:
    2345
  • 将其与IP和访问时间一起存储在数据库表中
  • 卸载事件fire,调用AJAX,传递页面和代码
  • 在数据库中查找IP、页面和代码,并记录离开时间

  • 如果他们再次访问
    index.php
    ,您将生成另一个代码,例如,
    36789
    。使用生成随机GUID的方法是最好的,因此您可以(基本上)忽略相同IP/页面/代码组合上发生冲突的任何可能性。

    您可以通过以下方式获得时间:

  • 一旦用户访问了您的站点,将cookie中的当前时间保存为“已访问”,并且在下次访问时,您可以获取它(如果已设置)
  • 而更昂贵的方法是:当页面加载时,启动js定时器,并在页面卸载时将用户发送的时间发送到服务器并保存到db
  • 若window.unload在Opera中不起作用,您可以每5秒向服务器发送一次时间,并将其存储到DB中 如果你需要,我可以写一个示例脚本

    更新:

    <!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请求之前,正在进行页面卸载。所以无法多次存储离开时间