我们如何在互联网断开连接或用户关闭选项卡/浏览器时调用注销servlet

How can we call logout servlet on internet disconnection or if user closes tab/browser?

本文关键字:选项 浏览器 servlet 注销 调用 互联网 断开 用户 连接 我们      更新时间:2023-09-26

我想避免使用相同的用户名和密码同时登录,为此我在数据库中设置了一个isloggdin选项,如果用户登录,它将变为"1",因此使用该用户名和密码他不能再次登录,如果他调用logout,它将变成"0",因此他可以登录。一切都很好,但当网络断开连接或用户关闭选项卡时,我遇到了问题。他无法登录,因为isloggdin设置为"1",应该通过将其设置为一个意味着它应该调用logout servlet来避免。我该如何做到这一点?

当用户关闭选项卡或浏览器时,没有任何技术可以肯定地通知web服务器。以下技术可以帮助您在用户会话结束后终止用户会话。

  1. 在web.xml中配置会话超时
  2. 将cookie的使用期限(如果您正在使用任何cookie)设置为-1,以便在浏览器关闭时将其删除
  3. 您可能有一个java脚本,它定期向服务器发送一些数据(心跳),指示会话处于活动状态。(但即使用户长时间空闲,这也会使会话保持活动状态)

您应该使用spring安全性来验证用户。除了其他好处外,您还可以控制允许的并发登录次数,请参阅中的"并发会话控制":http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html这样,一旦用户将使会话无效(通过使用注销操作)或关闭浏览器页面(您也可以捕捉到这一点,请参阅onbeforenload事件),即使会话由于空闲过多而超时,spring安全框架也会为您处理所有情况。这样,您就不需要再维护数据库值了。

与其使用DB标志,不如在服务器中使用List作为全局参数并添加用户名。因此,每当用户尝试登录时,都会将参数添加到列表中。然后,如果用户再次尝试登录会话,请在列表中检查该用户名是否可用,如果可用,请从该会话中删除。

如果使用数据库,可能会导致数据库过载。保持无数据库

您只需要在浏览器关闭时调用javascrip函数。您可以在那里添加逻辑来更改会话或限制用户关闭窗口。一切都取决于你。这里有一些参考代码来指导你

<html><head><title>Example</title>
<script language = "JavaScript">
function abc()
{
statements...
}
</script></head>
<body ONUNLOAD = "abc()">
</html>

没有一致或100%可靠的方法来检测浏览器的断开/关闭,HTTP协议中根本没有解决这个问题。如前所述,您可以使用Javascript(body onunload),但这并不能涵盖所有场景,并且在不同浏览器之间也不一致。

这里的简单答案是,你不应该把你的系统设计成依赖于能够检测到用户离开你的网站的那一刻(断开连接/导航离开/关闭窗口),因为你不能。