0

我被要求构建一个一次只能托管一个用户的项目管理应用程序。我通过简单地status在我的表中创建一行来做到这user一点,当有人登录时设置为 1。

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

一切都很好,除了,如您所见,它依赖于注销按钮,许多用户忘记以这种方式注销,他们只是关闭选项卡或浏览器保留status为 1,然后阻止整个系统。

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

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

谢谢你的帮助。

4

2 回答 2

2

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

不要尝试检测会话结束。

于 2012-07-17T08:46:49.237 回答
1

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


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

于 2012-07-17T09:07:14.063 回答