注册用户的实际退出时间


Register the actual log-out time of a user

我正在开发一个大型PHP (Yii框架)web应用程序,其中用户有帐户,可以登录和退出。为了简单起见,我们假设系统中有两个函数login(…)和logout(…)。

我需要记录每个用户的登录和注销时间。问题是,用户可能根本不会点击"登录"answers"注销"按钮。例如,他们可能只是关闭浏览器并在第二天打开它继续工作。在这种情况下,注销和登录事件都不会被记录。

如何解决这些困难,以便了解每个用户每天在系统中实际花费了多少时间?

浏览器窗口是否打开可能不是确定用户是否在系统中工作的最佳方法。我宁愿存储一个"最后的动作"时间戳,无论是通过javascript发送更新或实际的页面请求从url来确定用户何时"开始工作",并在离开页面方面"注销"(即使这意味着简单地在他的浏览器中留下一个打开的标签)。如果动作在时间上足够接近,则将其视为一个会话,如果3小时内没有动作,则将会话视为放弃。

一种方法是自己写一个简单的会话处理程序:http://ar.php.net/manual/en/function.session-set-save-handler.php这样你可以处理适当的函数,这些函数将在会话关闭,销毁,垃圾收集等时被调用。

会话将在超时后自动垃圾收集和销毁。但是,您可以使用一些技巧来检测用户不再存在,并强制关闭。

这是个很难回答的问题。例如,什么是工作?

  • 简单地打开浏览器窗口?
  • 在页面之间移动?
  • 等。

您可以有一个ajax小部件,将定期更新数据库与"心跳"。但这只能告诉您浏览器窗口是打开的。一旦你停止接收心跳,他们就会"注销",一旦他们恢复,如果会话仍然可用,你可以称之为"登录"。

但是,我不确定这是跟踪"工作"的最佳方法。