当前位置:  开发笔记 > 编程语言 > 正文

如何检测浏览器关闭?

如何解决《如何检测浏览器关闭?》经验,为你挑选了2个好方法。

在我的Web应用程序中,当用户登录时,我将他的Id添加到servlet中的有效ID的向量中,当他退出时,我从向量中删除了他的Id,因此我可以看到有多少当前用户是活动的,如果用户忘记注销,我的servelt生成的html具有:


在标签中自动将他退出.

但我注意到许多用户永远都在那里,从未退出.我发现了为什么,通过关闭他们的浏览器,他们从不手动或自动注销,因此他们的用户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中还有其他方法在会话关闭时被调用吗?



1> matt b..:

没有办法知道服务器端(除非您使用一些JavaScript向服务器发送消息)浏览器已关闭.怎么会有?想想HTTP的工作原理 - 一切都是请求和响应.

但是,应用程序服务器将跟踪Sessions何时处于活动状态,甚至会告诉您会话何时被销毁(例如由于超时).请查看此页面,了解如何配置HttpSessionListener接收这些事件.然后,您可以简单地跟踪活动会话的数量.

活动会话的数量将落后于当前用户的实际数量,因为在会话超时之前必须经过一段(可配置的)时间; 但是,这应该有点接近(您可以降低会话超时以提高准确性)并且它比1)自己跟踪Sessions或2)在浏览器关闭时向服务器发送一些异步JavaScript更加清洁和简单(这不保证发送).



2> sblundy..:

我建议你在Servlet引擎破坏会话时删除ID.注册一个HttpSessionListenersessionDestroyed()调用时删除用户ID的.

Diodeus的想法只会帮助您更快地检测到会话结束.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有