单用户系统中的注销问题


Logout issues in a single-user system

我被要求构建一个项目管理应用程序,该应用程序一次只能承载一个用户。我只需在user表中创建一个status行就可以做到这一点,当有人登录时,该行设置为1

现在,status = 1,没有其他人可以登录,他们收到一条错误消息,说另一个用户已经在使用该应用程序。当在线用户注销时,我会更新数据库中的status行,并将其设置为0,以允许其他用户自由登录。

一切都很好,只是,正如你所看到的,它依赖于注销按钮,许多用户忘记了注销,他们只是关闭选项卡或浏览器,将status保留为1,然后阻止整个系统。

我尝试了几种方法来在页面关闭时通过会话超时或通过onunload更新数据库,但我无法找到一种干净可靠的方法

如何开发这样一个将单用户模式和自动/智能注销同时结合的系统?

谢谢你的帮助。

实现这一点的唯一方法是检查登录用户在过去X分钟内是否处于活动状态。当新用户尝试登录时,请选中此项。当上一个用户在该时间段内处于非活动状态时,请取消在数据库中设置状态并让新用户登录。然后,您还应该使上一用户的会话无效,以防他回来。

不要试图检测会话结束。

您可以reduce the user's Session timeout。我认为您可以通过PhpWebserver(Apache、IIS等)实现这一点,应该真正查看手册页。完成后,您可以实现polling system,它定期ping用户以验证他/她的存在。例如,您可以制作一个客户端Ajax script,它以固定的时间间隔对站点进行ping,这样可以延长用户的活动会话。如果用户在时间窗口到期后不再ping站点,则设置他/她的status = 0。这只是一个想法。试着在谷歌上搜索更多关于的信息。


一种变体:您可以从服务器端语言设置一个cookie,并将会话与该cookie相关联。所以,给它一个短的到期时间。然后制作一个客户端脚本,定期向服务器发送隐藏请求。当服务器收到请求时,它会重新写入cookie,因此新时间将从头开始。