【问题标题】:How to track user time on site如何跟踪用户在网站上的时间
【发布时间】:2010-08-20 21:12:09
【问题描述】:

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

最简单的方法是什么?

【问题讨论】:

  • 你不能使用谷歌分析数据吗?
  • 已经有十几个包可以做到这一点。如果没有必要,不要重新发明轮子。查看 webalizer、awstats、urchin 等。这实际上是一个不平凡的问题。定义“现场停留时间”需要做出一些假设,因为您只知道浏览器何时请求内容,而不是用户何时关闭窗口、导航到远程站点等。
  • 我们提供了一个工作板,允许管理员进入并控制用户群的特定部分,我们希望为他们提供管理分析。

标签: php jquery codeigniter analytics


【解决方案1】:

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

  1. 一旦用户访问您的网站,将 cookie 中的当前时间保存为“已访问”,下次访问时您可以获取它(如果已设置)。
  2. 更昂贵的方法:当页面加载时,启动js计时器,并在页面卸载时将用户发送的时间发送到服务器并将其保存到db。
  3. 如果window.unload 在Opera 上不起作用,您可以每5 秒向服务器发送一次时间,并将其存储到数据库中。

如果你需要,我可以写一个示例脚本。

更新:

<!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 浏览器

【讨论】:

  • 太棒了,谢谢你的帮助 - 如果你有时间写一个快速的脚本,我很想看看?我可以在整个域上使用 page.unload 吗?
  • 等等,我开始写脚本了
  • 很多时候 ajax 调用不起作用.. 在发送 ajax 请求页面卸载发生之前。所以无法多次存储休假时间
【解决方案2】:

将 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 等)中也能正常工作。

【讨论】:

    【解决方案3】:

    我能想到的主要方式:

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

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

    1. 访问页面,生成代码(假设页面:index.php 代码:2345)
    2. 将其与他们的 IP 和访问时间一起存储在数据库表中
    3. Unload 事件触发,调用 AJAX,传递页面和代码
    4. 在数据库中查找 IP、页面和代码,并记录离开时间

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

    【讨论】:

    • 如果 Opera 浏览器卸载事件不起作用,你会怎么做?
    • @DimaKrasun 我没有意识到这会是个问题。以为所有浏览器都支持它,但我根本没有接触过Opera。每天学习新东西。
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        • 1970-01-01
        相关资源
        最近更新 更多