【问题标题】:Measuring online time on website在网站上测量在线时间
【发布时间】:2009-11-21 23:03:08
【问题描述】:

我想衡量用户在我的网站上花费的时间。社区站点需要它,您可以在其中说:“用户 X 已在此处花费了 1397 分钟。”

在阅读了一些关于此的文档后,我知道没有完美的方法可以实现这一点。你无法测量准确的时间。但我正在寻找一种可以提供良好近似值的方法。

你怎么能做到这一点?我的想法: 1) 每次浏览页面的在线时间计数器增加 30 秒。 2) 在每个页面视图上,保存当前时间戳。在下一个视图中,将保存的时间戳与当前时间戳之间的差异添加到在线时间计数器。

如果这很重要,我会使用 PHP 和 MySQL。

我希望你能帮助我。提前致谢!

【问题讨论】:

标签: php mysql time measure


【解决方案1】:

这可能毫无意义....如果用户打开了三个选项卡并“访问”您的站点,同时实际在其他两个选项卡上工作怎么办?你要数那个吗?

【讨论】:

  • @Jim,我认为使用 javscript 可以区分用户实际查看页面的时间,不是吗?
【解决方案2】:

有两个因素对你不利 -

  1. 您只能收集时间点统计信息(页面浏览量),并且没有合理的方法来检测这些时间点之间发生了什么;

  2. 即便如此,您还是要计算浏览器窗口时间,而不是用户时间;用户可以轻松地在多个浏览器实例上同时打开多个选项卡。

我怀疑您的最佳近似值是归因于每次点击的平均关注时间,然后相乘。但是,您也可以衡量点击次数。

【讨论】:

  • 谢谢,完美的答案。 :) 你说服我选择其他指标。
  • 像计算时间段的解决方案取决于具体的业务场景。而不是计算“会话”时间
【解决方案3】:

为什么不只衡量实际可以衡量的内容?:推荐、页面浏览量、点击率等。

收集和宣传这些数字完全符合其他网络指标。

此外,如果有人打开一个网页,然后,比如说,去两周假期,如何最好地解决这个问题?

【讨论】:

    【解决方案4】:

    您可以做的是检查用户是否为active on the page,然后每 X 秒(60 秒可以吗?)向您的服务器发送一个 ajax 请求,以确定用户是否在页面上。

    然后您可以使用您提到的第二种方法来计算两个“活动”时间戳之间的时间差,这些时间戳之间的间隔不超过一个或两个间隔。添加这些将给出用户在您的网站上花费的时间。

    【讨论】:

      【解决方案5】:

      谷歌分析包含一个非常强大的event logging/tracking 机制,您可以自定义和利用以获得对用户行为的非常好的测量 - 我会研究一下

      【讨论】:

        【解决方案6】:

        一个非常简单的解决方案是使用一个隐藏的 iframe 定期加载一个 php 网页。加载的网页记录开始时间(如果不存在)和停止时间。当此人离开页面时,您会看到此人第一次访问该站点的时间以及他们最后一次访问该站点的时间。在这种情况下,时间戳每 3 秒更新一次。

        我使用文件来保存日志信息。我使用的文件名由月-日-年 ipaddress.htm

        示例 iframe php 代码。把它放在你的网站/yourAnalyticsiFrameCode.php:

        <?php
          // get the IP address of the sender
          $clientIpAddress=$_SERVER['REMOTE_ADDR'];
          $folder = "yourAnalyticsDataFolder";
          // Combine the IP address with the current date.
          $clientFileRecord=$folder."/".date('d-M-Y')."  ".$clientIpAddress;
        
          $startTimeDate = "";
        
          // check to see if the folder to store analytics exists
          if (!file_exists($folder))
          {
            if (!mkdir($folder))
              return;  // error - just bail
        
          }
        
        
          if (file_exists($clientFileRecord) )
          {
            //read the contents of the clientFileRedord
            $lines = file($clientFileRecord);
        
            $count = 0;
        
            // Loop through our array, show HTML source as HTML source; and line numbers too.
            foreach ($lines as $line_num => $line)
            {
              echo($line);
              if ($count == 0)
                $startTimeDate = rtrim( $line );
              $count++;
        
            }
          }
        
          if ($startTimeDate == "")
            $startTimeDate = date('H:i:s d-M-Y');
        
          $endTimeDate = date('H:i:s d-M-Y');
        
          // write the start and stop times back out to the file
          $file = fopen($clientFileRecord,"w");
          fwrite($file,$startTimeDate."\n".$endTimeDate);
          fclose($file);
        
        
        ?>

        在主网页中定期重新加载 iframe 的 javascript。:

        <!-- Javascript to reload the analytics code -->
        <script>
          window.setInterval("reloadIFrame();", 3000);
        
          function reloadIFrame() {
            document.getElementById('AnalyticsID').src = document.getElementById('AnalyticsID').src
              //          document.frames["AnalyticsID"].location.reload();
          }
        </script>

        主网页中的 iframe 如下所示:

        <iframe id="AnalyticsID" name="AnalyticsID" src="http://yourwebsite/yourAnalyticsiFrameCode.php" width="1"
        height="1" frameborder="0" style="visibility:hidden;display:none">
        </iframe>

        显示时间戳文件的一种非常简单的方法:

        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
        
        <html>
        
        <head>
          <title></title>
        </head>
        
        <body>
        Analytics results
        <br>
        <?php
          $folder = "yourAnalyticsDataFolder";
          $files1 = scandir($folder);
          // Loop through the files
          foreach ($files1 as $fn)
          {
            echo ($fn."<br>\n");
            $lines = file($folder."/".$fn);
            foreach ($lines as $line_num => $line)
            {
              echo("  ".$line."<br>\n");
            }
            echo ("<br>\n <br>");
        
          }
        
        ?>
        </body>
        
        </html>

        你会得到这样的结果页面:

        2015 年 3 月 22 日 104.37.100.30

        2015 年 3 月 22 日 18:09:03

        2015 年 3 月 22 日 19:18:53


        2015 年 3 月 22 日 142.162.20.133

        2015 年 3 月 22 日 18:10:06

        2015 年 3 月 22 日 18:10:21

        【讨论】:

          【解决方案7】:

          我认为客户端 JavaScript 分析是解决此问题的方法。

          您有 google analitycs piwik,还有 JS 中的广告工具可以做到这一点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-01
            • 1970-01-01
            • 1970-01-01
            • 2020-02-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多