在我的 Web 应用程序中,当用户登录时,我将他的 Id 添加到 servlet 中的有效 Id 向量中,当他注销时,我从向量中删除他的 Id,这样我就可以看到当前有多少用户处于活动状态,如果用户忘记注销,我的服务器生成的 html 有:
<meta http-equiv="Refresh" content="30; url=My_Servlet?User_Action=logout&User_Id=1111">
在标签中自动将他注销。
但我注意到许多用户永远存在,从未退出。我找到了原因,通过关闭浏览器,他们从不手动或自动注销,因此他们的用户 ID 永远不会从有效的用户 ID 向量中删除。
所以,我的问题是:如何检测用户关闭浏览器,以便我的 servlet 可以从向量中删除他们的 ID?
我在隧道尽头看到了一些亮光,但仍然存在问题,我的程序有这样的内容:
活跃用户列表:
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 中是否还有其他方法被调用?