在我的Web应用程序中,当用户登录时,我将他的Id添加到servlet中有效Id的向量中,当他注销时,我从向量中删除他的Id,以便我可以查看有多少当前用户处于活动状态。如果用户忘记注销,则我的servlet生成的HTML为:
<meta http-equiv="Refresh" content="30; url=My_Servlet?User_Action=logout&User_Id=1111">
在标签中自动注销用户。
但我注意到很多用户一直在线,从未注销。我发现原因是他们关闭了浏览器,从未手动或自动注销,因此他们的用户 ID 将永远不会从有效用户 ID 向量中删除。
那么,我的问题是:如何检测到用户关闭浏览器,以便我的 Servlet 可以从向量中删除他们的 ID?
我看到了一线希望,但还存在一个问题,我的程序有类似于以下内容:
Active User List:
User_1 : Machine_1 [ IP_1 address ]
User_2 : Machine_2 [ IP_2 address ]
User_3 : Machine_3 [ IP_3 address ]
...
从会话监听器中,如何知道哪个用户的会话已经结束,因此将其从我的列表中删除?
我希望当会话结束时,HttpServlet的destroy()
方法会被调用,然后我可以在其中删除用户ID,但是当用户关闭浏览器时,它永远不会被调用,为什么?还有没有其他的方法在HttpServlet中,在会话关闭时被调用?