如何在网站上跟踪用户时间

时间:2010-08-20 21:12:10

标签: php jquery codeigniter analytics

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

最简单的方法是什么?

5 个答案:

答案 0 :(得分:20)

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

  1. 用户访问您的网站后,将当前时间保存为“已访问”的Cookie,并在下次访问时抓取,如果已设置。
  2. 更昂贵的方法:当页面加载时,启动js计时器,并在页面卸载时发送到用户发送的服务器时间并将其保存到db。
  3. 如果window.unload在Opera中不起作用,您可以每5秒向服务器发送一次时间,并将其存储到DB。
  4. 如果需要,我可以编写一个示例脚本。

    <强>更新

    <!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>
    

    后端脚本:

    <?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);
    }
    

    但正如我所说它在Opera浏览器中不起作用

答案 1 :(得分:5)

我能想到的主要方式:

当用户首次点击页面时,您会记录他们的IP地址,加载的页面和时间。然后,使用一些Javascript和AJAX,当他们离开页面时,使用unload事件发送到记录页面的AJAX处理程序以及它们何时离开。

除了会话之外,您还需要使用某种ID来存储页面访问。假设我打开了5个主页实例,您需要单独记录每个实例。所以,像这样:

  1. 访问该页面,生成代码(比如页面:index.php代码:2345
  2. 将其存储在具有IP的数据库表中,并访问时间
  3. 卸载事件触发,调用AJAX,传递页面&amp;代码
  4. 在数据库中查找IP,页面和代码,并记录休假时间
  5. 如果他们再次访问index.php,您会生成另一个代码,例如36789。使用生成随机GUID的东西是最好的,这样你就可以(基本上)忽略同一IP /页面/代码组合上任何碰撞的可能性。

答案 2 :(得分:2)

使用PHP确实没有一种有效的方法,因为PHP是服务器端的,并且无法确定页面何时关闭。您需要使用javascript来确定这一点。

我要做的是使用javascript在window.onload上启动计时器,然后在window.onunload上结束计时器。然后你可以存储数据并用它做你想做的事。

答案 3 :(得分:0)

$(window).unload是一个非常好的跟踪用户离开页面的功能。

但有一点是当窗口卸载发送ajax时它现在正常工作,当用户离开页面时ajax没有完成。所以你需要向ajax添加一个属性(async:false),代码是打击:

$.ajax({
                  type: 'POST',
                  async: false,
                  url: '/collect-user-time/ajax-backend.php',
                  data: {time: time}
              });

答案 4 :(得分:0)

timeonsite JS用于Web和移动浏览器。它可以准确地跟踪现场时间。

<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> 

在页面结尾,致电

<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>

就这么简单

即使在不支持本机 window.unload() 事件的移动浏览器(如iPhone,iPad,移动Safari等)中,它似乎也可以正常工作。