如何在关闭浏览器时从数据库中删除数据

Ali*_*sam 4 java sql session jsp servlets

当用户登录我的Web应用程序时,我创建了一个会话:

session.setAttribute("SessionNumber","100");
Run Code Online (Sandbox Code Playgroud)

并且他的用户名被添加到名为ONLINE_USERS. Other Online的用户将能够看到他,他们看到所有在线用户

当用户单击注销按钮时,我从表中删除该行,然后使用以下命令删除会话:

session.invalidate();
Run Code Online (Sandbox Code Playgroud)

但是让我们说用户已经存在浏览器,他的会话将会消失,但该行将作为在线用户留在数据库中,如何避免这种情况?

我在Netbeans上使用JSP-Servlets.

dce*_*chi 6

您可以启用自定义HttpSessionListener以在会话失效时删除表行.

public class YourHttpSessionListener implements HttpSessionListener {       
   public void sessionCreated(HttpSessionEvent event) {
   //put row in the database
   }

   public void sessionDestroyed(HttpSessionEvent event) {
     //delete the row from database     
   }
}
Run Code Online (Sandbox Code Playgroud)

在web.xml中声明监听器:

<listener>
    <listener-class>YourHttpSessionListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)

请注意,在用户退出浏览器并且其会话在服务器上到期之间会有延迟.但会话到期时间是可配置的.您应该找到合适的到期超时:不要太长,这样您就不会在线显示过多的离线用户,但也不能太短以至于不能让连接的用户空闲.

我认为这对于使用基础servletjsp技术开发的聊天应用程序来说是一个很好的折衷.