我想避免使用相同的用户名和密码同时登录,为此我在数据库中设置了一个 isloggedin 选项,如果用户登录它将变为“1”,因此使用该用户名和密码他无法再次登录,如果他打电话注销它将变为“0”,以便他可以登录。一切都很好,但是当网络断开或用户关闭选项卡时我遇到了问题。他无法登录,因为 isloggedin 设置为“1”,应该通过将其设置为一个来避免它,这意味着它应该调用 logout servlet。我怎样才能做到这一点?
5 回答
当用户关闭选项卡或浏览器时,没有技术可以肯定地通知 Web 服务器。以下技术可以帮助您在用户会话消失后终止它们。
- 在 web.xml 中配置会话超时。
- 将 cookie 的年龄(如果您使用任何)设置为 -1。以便在浏览器关闭时将其删除。
- 您可能有一个 java 脚本,它定期向服务器发送一些数据(心跳),表明会话处于活动状态。(但这将使会话保持活动状态,即使用户长时间处于空闲状态)
您应该使用 spring-security 来验证用户。除了其他好处外,您还可以控制允许多少并发登录,请参阅“并发会话控制”:http ://static.springsource.org/spring-security/site/docs/3.0.x/reference /ns-config.html 这样,一旦用户将会话无效(通过使用注销操作)或关闭浏览器页面(您甚至可以捕捉到它,请参阅 onbeforeunload 事件),即使会话将超时,因为它是空闲的太多的 spring-security 框架将为您处理所有情况。这样,您将不再需要维护该 db 值。
与其使用数据库标志,不如使用服务器中的列表作为全局参数并将用户名添加到其中。因此,每当用户尝试登录时,将参数添加到列表中。然后,如果用户再次尝试登录会话,请在列表中检查该用户名是否可用,如果可用则从该会话中删除。
如果使用数据库,可能会导致数据库过载。保持数据库免费
没有一致或 100% 可靠的方法来检测断开/关闭浏览器,它根本没有在 HTTP 协议中解决。如前所述,您可以使用 Javascript body onunload
(
简短的回答是,您不应该将系统设计为依赖于能够检测到用户离开您的站点的时刻(断开连接/导航离开/关闭窗口),因为您不能。
您只需要在浏览器关闭时调用 javascrip 函数。您可以在那里添加逻辑来更改会话或限制用户关闭窗口。全取决于你。这是一些指导您的参考代码
<html><head><title>Example</title>
<script language = "JavaScript">
function abc()
{
statements...
}
</script></head>
<body ONUNLOAD = "abc()">
</html>