【问题标题】:Logging Activities: How to record time using a PHP application?记录活动:如何使用 PHP 应用程序记录时间?
【发布时间】:2011-12-25 19:01:47
【问题描述】:

我正在使用一些现有的 PHP/MySQL 代码。我正在将某些活动记录/跟踪到 MySQL 数据库中。正在记录某些接入点。统计用户登录系统的次数。但是,我还需要记录用户登录的时间,以及用户在网站某个部分的时间。

由于 PHP 是无状态环境,在大多数情况下,记录端点的最佳方式是什么;或者当用户注销时?

注意:我不能强制用户退出,因为浏览器只能关闭。也许我可以设置一个 AJAX 计时器来计算分钟数?如果是这样,我应该将活动和登录时间视为不同的信息表(MySQL)吗?

编辑:我忘了提到我们确实有可用的 jQuery。

【问题讨论】:

    标签: php mysql session logging tracking


    【解决方案1】:

    就像你说的,你不能强迫用户退出,你也不能确定他是在看你的页面还是在玩弹球。

    一种解决方案是每隔 5 分钟发出一次 AJAX 请求,告诉您的应用程序用户处于活动状态。不幸的是,如果您的用户锁定了屏幕并开始玩弹球游戏,您仍然不知道他在做什么。此外,以这样的间隔执行 AJAX 请求会增加服务器负载,尤其是在多用户环境中。

    我认为最好的解决方案是简单地存储用户的start_time(当他登录时),然后在他执行的每个操作时更新end_time,并且会话超时。

    举例:

    • 我在 5:00 登录。将start_time 更新为5:00
    • 我在 5:01 浏览到 foo.php。将end_time 更新为5:01
    • 我在 5:03 浏览到 bar.php。将end_time 更新为5:03
    • 我 5:05 去喝杯咖啡。
    • 我在 5:15 回来,我的会话已过期,我需要重新登录。

    所以,你知道我在你的申请上花了大约 3 分钟,因为我做的最后一个动作是在 5:03 (5:03 - 5:00 = 3)。当然,你无法确切知道是 3 分钟还是 5 分钟。但你可以假设,大多数时候,如果我不对你的应用程序做任何事情(即:执行脚本、调用等),我就没有使用它。

    显然,如果您可以捕获诸如 window close 之类的 JavaScript 事件,那就更好了,或者如果我手动退出:您相应地更新 end_time

    【讨论】:

      【解决方案2】:

      您需要捕获两个事件。

      1. 页面的 onCLose() 事件并将其挂钩到 ajax 回调到您的日志记录系统。
      2. 注销按钮的 onClick() 事件并将其挂接到保存 ajax 处理程序中。

      onClose 事件将允许您在选项卡/浏览器关闭且 onCLick 事件明显时捕获。

      现在这将不会捕获浏览器死机、机器断电等的时间,因此会有一些情况下您会有差距,这些情况可以通过您的登录事件处理程序进行纠正,只需将最后一次登录事件标记为注销在下次登录时。但是,这会导致您在跟踪登录时间时出现异常值,您需要在报告中对这些异常值进行统计处理。

      【讨论】:

        【解决方案3】:

        您可以使用一个额外的 PHP 脚本来记录最后的活动并通过 ajax 调用它。

        您可以使用 javascript 来监控用户是否仍处于活动状态(在过去 5 分钟内移动了鼠标或按下了某个键等)

        编辑:几乎忘记了重要的部分:您的 java 脚本必须在 X 秒内发出一个 ajax 请求。 因此,如果在 x+tollerance 秒内没有请求,您可以认为会话已死。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-02
          • 2014-02-28
          • 1970-01-01
          • 2011-09-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多