2011-05-05 68 views
2

我正在研究一个PHP(Yii框架)大型Web应用程序,用户可以在其中登录和注销帐户。让我们假设为了简单起见,我在系统中有两个函数login(...)和logout(...)。注册用户的实际注销时间

我需要记录每个用户的登录和注销时间。问题是,用户可能实际上并未实际点击“登录”和“注销”按钮。例如,他们可能只需关闭浏览器并打开它即可在第二天恢复工作。在这种情况下,不会记录注销或登录事件。

我该如何解决这些困难,以便了解每个用户实际每天在系统中工作的时间?

回答

1

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

+0

谢谢!这对我有用! – 2011-05-23 07:22:48

+0

@jon skarpeteig嗨我也有同样的问题..你的答案稍微给一些想法,你可以详细说明或给一些样品。 – jayanthan 2012-04-26 06:50:22

1

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

会议会在超时后自动收集垃圾并销毁。但是,你可以做一些技巧来检测用户不在那里,并强制关闭。

+0

有趣!看着它,感谢指针。 – 2011-05-05 09:56:38

0

这是一个棘手的问题。例如,什么构成工作?

  • 只需打开浏览器窗口?
  • 在页面之间移动?

你可以有一个AJAX控件,将定期与“心跳”更新数据库。但是这只会告诉你浏览器窗口是打开的。一旦你停止听取他们的信息,他们就会“退出”,一旦他们恢复,只要会话仍然可用,你可以称之为“登录”。

但是,我不确定这是跟踪“工作”的最佳方式。

+0

现在,我假设只是打开窗口=工作,尽管当然这并不总是如此。 – 2011-05-05 10:10:41