JavaWeb 怎么检测客户端浏览器关闭并销毁session

时间:2022-03-27 12:53:11
如题,系统要求某页面在同一时间只能一个人使用。目前只能提供一个jsp链接让用户退出的时候点击去销毁,但大部分用户会直接关浏览器吧。有什么方法可以检测到用户退出页面呢(暂不考虑掉电、死机等问题了)?
背景:因为系统页面是与实际硬件相连的,所以每一次只能让一个用户进来操作,否则就乱套了。

14 个解决方案

#1


顶起来,有人看到吗,有没有人解决过这个问题

#2


http://blog.csdn.net/feiyu84/article/details/6844830 你想知道的是这个吗?

#3


@顾小林 二楼链接解决不了,我的背景和账户是没有关系的,不同账户在同一时间也只能是一个人操作硬件。

#4


引用 楼主 hunterlew 的回复:
如题,系统要求某页面在同一时间只能一个人使用。目前只能提供一个jsp链接让用户退出的时候点击去销毁,但大部分用户会直接关浏览器吧。有什么方法可以检测到用户退出页面呢(暂不考虑掉电、死机等问题了)?


你对互联网的知识太少了!

大部分用户,会直接从浏览器的地址栏上贴入新的网站地址、输入新的网站地址(例如www.taobao.com),或者从收藏夹里直接找出新的地址,而不是什么想当然的“直接关闭浏览器”。

你“暂不考虑”互联网常用操作,你做得就是徒劳的。

#5


是啊,难道就无解了吗...

#6


servlet上有8个事件监听器,在请求,会话,上下文对象上触发.

你需要的是监听浏览器的相关事件,跟java,扯不上关系吧

#7


要实现唯 一身份在线也不难,无非是在登录时判断一下此会员是否未处于在线状态

#8


@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。

#9


每隔一小段时间向后端发送一次在线请求 超过这个时间没法送就当下线了
onbeforeonload试下能不能发请求

#10


引用 8 楼 hunterlew 的回复:
@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。


首先你要知道你要捕获的事件在哪发生,servlet的事件在服务器上servlet容器中发生,而你要捕获的是客户端浏览器

#11


引用 10 楼 xiaofanku 的回复:
Quote: 引用 8 楼 hunterlew 的回复:

@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。


首先你要知道你要捕获的事件在哪发生,servlet的事件在服务器上servlet容器中发生,而你要捕获的是客户端浏览器


所以说无解呀~

#12


引用 11 楼 hunterlew 的回复:
Quote: 引用 10 楼 xiaofanku 的回复:

Quote: 引用 8 楼 hunterlew 的回复:

@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。


首先你要知道你要捕获的事件在哪发生,servlet的事件在服务器上servlet容器中发生,而你要捕获的是客户端浏览器


所以说无解呀~
没有无解的问题。可能是你现在力所不能及的吧。如果用户用的浏览器是你写的哪都不是事

#13


应该没有吧。连session都是超时才销毁,如果有这种事件,session不会这么设计吧

#14


websocket 长连接考虑一下吧

#1


顶起来,有人看到吗,有没有人解决过这个问题

#2


http://blog.csdn.net/feiyu84/article/details/6844830 你想知道的是这个吗?

#3


@顾小林 二楼链接解决不了,我的背景和账户是没有关系的,不同账户在同一时间也只能是一个人操作硬件。

#4


引用 楼主 hunterlew 的回复:
如题,系统要求某页面在同一时间只能一个人使用。目前只能提供一个jsp链接让用户退出的时候点击去销毁,但大部分用户会直接关浏览器吧。有什么方法可以检测到用户退出页面呢(暂不考虑掉电、死机等问题了)?


你对互联网的知识太少了!

大部分用户,会直接从浏览器的地址栏上贴入新的网站地址、输入新的网站地址(例如www.taobao.com),或者从收藏夹里直接找出新的地址,而不是什么想当然的“直接关闭浏览器”。

你“暂不考虑”互联网常用操作,你做得就是徒劳的。

#5


是啊,难道就无解了吗...

#6


servlet上有8个事件监听器,在请求,会话,上下文对象上触发.

你需要的是监听浏览器的相关事件,跟java,扯不上关系吧

#7


要实现唯 一身份在线也不难,无非是在登录时判断一下此会员是否未处于在线状态

#8


@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。

#9


每隔一小段时间向后端发送一次在线请求 超过这个时间没法送就当下线了
onbeforeonload试下能不能发请求

#10


引用 8 楼 hunterlew 的回复:
@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。


首先你要知道你要捕获的事件在哪发生,servlet的事件在服务器上servlet容器中发生,而你要捕获的是客户端浏览器

#11


引用 10 楼 xiaofanku 的回复:
Quote: 引用 8 楼 hunterlew 的回复:

@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。


首先你要知道你要捕获的事件在哪发生,servlet的事件在服务器上servlet容器中发生,而你要捕获的是客户端浏览器


所以说无解呀~

#12


引用 11 楼 hunterlew 的回复:
Quote: 引用 10 楼 xiaofanku 的回复:

Quote: 引用 8 楼 hunterlew 的回复:

@街头小贩 我也是用的监听器,但发现只能监听session销毁的事件,没有监听浏览器关闭的事件,从而用户直接关掉浏览器我就没法重置我的全局变量了。


首先你要知道你要捕获的事件在哪发生,servlet的事件在服务器上servlet容器中发生,而你要捕获的是客户端浏览器


所以说无解呀~
没有无解的问题。可能是你现在力所不能及的吧。如果用户用的浏览器是你写的哪都不是事

#13


应该没有吧。连session都是超时才销毁,如果有这种事件,session不会这么设计吧

#14


websocket 长连接考虑一下吧