日志记录活动:如何使用PHP应用程序记录时间?

日志记录活动:如何使用PHP应用程序记录时间?,php,mysql,session,logging,tracking,Php,Mysql,Session,Logging,Tracking,我正在使用一些现有的PHP/MySQL代码。我正在将某些活动记录/跟踪到MySQL数据库中。正在记录某些访问点。统计用户登录系统的次数。但是,我还需要记录用户登录的时间,以及用户在网站某个部分的时间 由于PHP是一个无状态环境,在大多数情况下,记录端点的最佳方式是什么;或者当用户注销时 注意:我不能强制用户注销,因为浏览器可以关闭。也许我可以安装一个AJAX计时器来计算分钟数?如果是这样,我是否应该将登录的活动和时间视为不同的信息表(MySQL) 编辑:我忘了提到我们有jQuery可用。您需要捕

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

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

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


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

您需要捕获两个事件

  • 页面的onCLose()事件,并将其挂接到日志系统的ajax调用中
  • 注销按钮的onClick()事件,并将其挂接到saveajax处理程序中
  • onClose事件将允许您在tab/broswer关闭且onCLick事件明显时进行捕获


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

    正如您所说,您无法强制用户注销,您也无法确定用户是在看您的页面还是在玩弹球

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

    我认为最好的解决方案是简单地存储用户的
    开始时间
    (当用户登录时),然后在每次操作时更新
    结束时间
    ,并使用会话超时

    每个示例:

    • 我5点登录。将
      开始时间
      更新为
      5:00
    • 我在5:01浏览到
      foo.php
      。将
      结束时间
      更新为
      5:01
    • 我在5:03浏览到
      bar.php
      。将
      结束时间
      更新为
      5:03
    • 我5:05去喝咖啡
    • 我5点15分回来,我的会话过期了,我需要重新登录
    所以,您知道我在您的应用程序上花了大约3分钟,因为我做的最后一个操作是在5:03(
    5:03-5:00=3
    )。当然,你不能确切地知道是3分钟还是5分钟。但大多数情况下,您可以假设,如果我不在您的应用程序上执行任何操作(例如:执行脚本、调用等),那么我不会使用它


    显然,如果您可以捕获诸如window close之类的JavaScript事件,或者如果我手动注销,那就更好了:您可以相应地更新
    结束时间。

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

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

    编辑:几乎忘记了重要的部分:java脚本必须每隔X秒发出一个ajax请求。 所以如果没有X+TeleRuns秒的请求,你可以认为这个会话已经死了。