跟踪在网站上花费的时间

时间:2015-02-23 07:39:13

标签: javascript ruby-on-rails

我想跟踪经过身份验证的用户在我的网站上花费的时间。

要做到这一点,我已将此代码放在我的布局上:

  function js_yyyy_mm_dd_hh_mm_ss (param) {
        now = new Date(param);
      year = "" + now.getFullYear();
      month = "" + (now.getMonth() + 1); if (month.length == 1) { month = "0" + month; }
      day = "" + now.getDate(); if (day.length == 1) { day = "0" + day; }
      hour = "" + now.getHours(); if (hour.length == 1) { hour = "0" + hour; }
      minute = "" + now.getMinutes(); if (minute.length == 1) { minute = "0" + minute; }
      second = "" + now.getSeconds(); if (second.length == 1) { second = "0" + second; }
      return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
    }
    var start;



    $(document).ready(function() {
       var d = new Date();
       start = d.getTime();
    });
    <% if current_user %>
      $(window).on('beforeunload', function() {
        var d = new Date();
        end = d.getTime();
        timeSpent = (end-start)/1000;
        page = window.location.toString();
        debut=js_yyyy_mm_dd_hh_mm_ss(start);
        fin=js_yyyy_mm_dd_hh_mm_ss(end);

        $.ajax('<%= users_time_path %>', {
          async: false,
          type: 'POST',
          data: {log_time:{start:debut, end: fin, timespent: timeSpent, page:page}},
          success: function(res,status) { },
          error: function (res, status) {
                console.log('Server error: '+ status);
          }
      });
      <% end %>

      });

但是使用此代码,如果用户打开了两个标签,我会计算两倍的时间。

此外,如果用户在打开选项卡的情况下离开此计算机并在两天后回来,我将计算超过48小时......

我应该怎么做才能避免这种情况?

如何在服务器端进行操作以避免用户假冒时间?

感谢

1 个答案:

答案 0 :(得分:0)

每隔1-5分钟(ajax或其他)调用服务器,在php中你有一个会话和来自客户端的ip,你可以使用booth来跟踪和识别用户。

一些链接:

为你的假保护:

1分钟后停止呼叫服务器,无需移动鼠标或其他东西......