gpt4 book ai didi

javascript - 如何检测浏览器关闭?

转载 作者:可可西里 更新时间:2023-11-01 01:23:06 30 4
gpt4 key购买 nike

在我的网络应用程序中,当用户登录时,我将他的 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 ]
...

我如何从 session 监听器知道哪个用户的 session 已结束并因此将他从我的列表中删除?

我希望 session 结束时,HttpServlet 的 destroy() 方法会被调用,我可以删除其中的用户 ID,但是当用户关闭浏览器时它永远不会被调用,为什么?当 session 关闭时,HttpServlet 中是否有任何其他方法被调用?

最佳答案

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

但是,应用程序服务器会跟踪 Session 何时处于事件状态,甚至会告诉您 Session 何时被销毁(例如由于超时)。看看this page查看如何配置 HttpSessionListener接收这些事件。然后您可以简单地跟踪事件 session 的数量。

事件 session 的数量将滞后于当前用户的实际数量,因为在 session 超时之前必须经过一段(可配置的)时间;然而,这应该有点接近(你可以降低 session 超时以提高准确性)并且它比 1)自己跟踪 session 或 2)在浏览器关闭时向服务器发送一些异步 JavaScript(不能保证发送)。

关于javascript - 如何检测浏览器关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/299679/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com