在我的网络应用程序中,当用户登录时,我将他的 Id 添加到 servlet 中的有效 Id 向量中,当他注销时,我从向量中删除他的 Id,这样我就可以看到有多少当前用户处于活动状态,如果用户忘记注销,我的servelt生成的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 ]
...
我如何从会话侦听器中知道哪个用户的会话已结束并因此将他从我的列表中删除?
我希望当会话结束时,destroy()
会调用 HttpServlet 的方法,并且我可以删除其中的用户 ID,但是当用户关闭浏览器时它永远不会被调用,为什么?当会话关闭时,HttpServlet 中是否还有其他方法被调用?