【问题标题】:Detecting and storing logout times检测和存储注销时间
【发布时间】:2012-10-28 01:44:14
【问题描述】:

我的应用程序当前存储一些基本的_SESSION 事件,例如登录和请求的每个页面/URI。我被要求增强事件日志记录以包括用户注销时的跟踪。

注销的问题在于用户并不总是记得单击专用的注销按钮。有时他们只是让浏览器保持打开状态,或者关闭打开的浏览器窗口,或者干脆关闭。我不能总是保证确切的注销事件。

我可以通过在事件表中查询没有活动的时间段来粗略了解用户注销时间,但这似乎很粗略。

是否有检测 PHP 中被动注销的最佳实践?

【问题讨论】:

  • 我会搭载会话 TTL。您使用的是数据库表还是文件系统?不要认为你真的可以连接到会话 GC,所以可能只想轮询会话。
  • 客户端每分钟向服务器发送一次心跳。如果客户端关闭浏览器,则不再有心跳。
  • 答案就在您的问题中。使用用户的最后活动时间戳,包括您设定的不活动时间(即使用 cronjob)——在这种特定情况下,依赖客户端输入确实没有什么好的方法。

标签: php session logging tracking logout


【解决方案1】:

你基本上有你的答案 - 没有活动意味着他们已经退出。

如果您的服务器可以处理它,并且它非常重要,您可以将 Javascript 超时设置为每分钟“ping”一次。如果你得到了 ping,那么浏览器仍然在页面上,如果你没有,他们可能已经移动了。确切地说,当您定义“注销”时仍然有点猜测工作,添加用户可能会离开页面,然后在会话有效时稍后返回。

【讨论】:

  • "并且用户可以离开页面然后在会话有效时稍后返回。"这就是为什么我认为也许监视会话文件消失是一种更好的方法。如果使用数据库进行存储,触发器可能是利用 PHP 会话管理的好方法。我的意思是有什么比他们在技术上登录更好的方式来定义“登录”。
  • 完全同意。只是 OP 要求以更精确的方式说明他们何时关闭浏览器 - 这是唯一可行的选择(除了以这种方式打开套接字和监视,但它们在浏览器中的支持不足甚至无法考虑) .
  • 我的用户几乎不会离开应用程序浏览,我确实喜欢“ping”或“heartbeat”方法的即时性。听起来不太准确但更好的方法是监视会话文件夹以触发注销事件。感谢两位的回复。
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多