PHP登录/注销设计问题

时间:2009-11-24 11:55:50

标签: php mysql

我正在考虑实施一个小型跟踪系统,该系统将跟踪用户的登录/注销时间,并跟踪当前登录的用户。除了跟踪用户何时注销之外,这对我来说都是有意义的。当用户单击“注销”按钮时,它很容易,该按钮调用可以使用注销时间更新数据库的功能,但是如果用户刚刚退出浏览器,该怎么办。我怎样才能创建一个能处理这个事件的函数,我猜想当用户以非正式的方式退出php应用程序时,我没有想到任何其他情况。此外,非常感谢有关此主题的在线教程的任何链接。

3 个答案:

答案 0 :(得分:12)

最简单的解决方案可能只是在每次对您的网站执行操作时将用户标记为“活动”(即,每次在服务器上生成页面时) - 您已经知道该怎么做。

如果用户长时间被标记为“活动”(例如,超过5分钟;可能更多,具体取决于您网站上的内容类型)前,你可以认为他不再活跃了 - 实际上甚至可能不在你的网站上了。

当然,在检测到用户不再存在之前,您有几分钟的延迟......


一个可能的补充解决方案是每隔一两分钟使用一次Ajax请求:这样,在检测到用户不再在这里之前你有一个较短的延迟......

但是,使用此解决方案:如果用户在您的网站上打开了浏览器窗口/标签,则认为用户处于活动状态 - 即使他没有真正使用它(我总是打开很多标签页) firefox,有些在我实际上并没有使用数小时/天的网站上!)

答案 1 :(得分:3)

你可以使用Javascript在窗口卸载事件上调用PHP函数(通过AJAX),或者只是在用户注册后将用户注销。自动停用30分钟。

答案 2 :(得分:2)

您无法跟踪用户何时关闭浏览器或您的网页。

我试图询问有关跟踪用户关闭页面的内容:AJAX - when user leaves page - good or bad practice/implementation?

显然,在before_unload事件上发送数据并不是那么好。

您可以做的是考虑用户在一段时间不活动后注销。

每次用户转到某个页面时,都会存储时间戳。例如,如果时间戳超过5分钟,则称用户处于离线状态。您可以将时间戳存储到数据库或会话中。

或者,如果您希望它更准确,您可以每隔一段时间(比如说30秒)将AJAX-ly调用回服务器,以延长您的活动时间戳。