在网站上测量在线时间

时间:2009-11-21 23:03:08

标签: php mysql time measure

我想衡量用户在我的网站上花费的时间。社区网站需要这样说:“用户X在这里花了1397分钟。”

在阅读了一些关于此的文件之后,我知道没有完美的方法来实现这一目标。您无法测量确切的时间。但我正在寻找一种能够提供良好近似值的方法。

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

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

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

7 个答案:

答案 0 :(得分:6)

这可能毫无意义......如果用户打开了三个标签并在实际处理其他两个标签时“访问”您的网站,该怎么办?你想算数吗?

答案 1 :(得分:2)

为什么不测量实际可以测量的内容?:推介,页面浏览量,点击率等。

收集和宣传这些数字与网络指标的其他方面完全一致。

此外 - 如果有人提出一个网页,然后再说两周假期,那么如何最好地解释它?

答案 2 :(得分:2)

您可以做的是检查用户是否为active on the page,然后每隔X秒向服务器发送一个ajax请求(60秒就可以了?)用户在页面上是否处于活动状态。< / p>

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

答案 3 :(得分:2)

有两个因素对你不利 -

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

  2. 即使这样,你也要计算浏览器窗口时间,而不是用户时间;用户可以轻松地在多个浏览器实例上同时打开多个选项卡。

  3. 我怀疑你的最佳近似是将每次点击的平均注意力时间归因于然后乘以。但是,您也可以衡量点击次数。

答案 4 :(得分:0)

谷歌分析包括一个非常强大的event logging/tracking机制,你可以自定义和挖掘用户行为的真正好测量 - 我会调查

答案 5 :(得分:0)

一个非常简单的解决方案是使用隐藏的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);


?>

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

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

18:09:03 2015年3月22日

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

答案 6 :(得分:-2)

我认为客户端JavaScript分析就是解决方案。

你有google analitycs,piwik,还有JS中的广告工具就是这样做的。