浏览器关闭前服务器如何获知

时间:2022-09-13 22:30:55
当用户点击浏览器右上角的“关闭”按钮时,
如何在第一时间将关闭信息提交给服务器获知。
服务器可进行一些操作,比如打印一个log信息等。

希望能给个好的思路或灵感,
在下将不胜感激。

20 个解决方案

#1


鉴于http为无状态协议,浏览器的关闭原则上服务器是不能获知的。
不知道楼主为什么一定要获知,描述一下需求或许对你的问题解决有帮助。
比如如果你想在关闭某个叶面时解锁,那么在关闭时可以用js提示一下,
也可以直接发解锁请求。
单纯所有叶面都要处理的情况我认为是没有的。
log信息一般也不需要记录这些

#2


可以用onunload的事件吧。不过能不能提交到后台,需要验证一下,另外要排除刷新的情况。

#3


<HTML>
<HEAD>
<TITLE>xxx</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
<script>
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈
  function exitSystem(){
alert("确认关闭xxx系统吗");
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改
  }
</script>
</HEAD>
<BODY onbeforeunload="exitSystem()">
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
</BODY>
</HTML>

#4


没有100%成功的办法。所以不要通过这个方法做关键性的任务

#5


HTML code<HTML>
<HEAD>
<TITLE>xxx</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
<script>
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈
  function exitSystem(){
    var flag=confirm("确认关闭xxx系统吗");//可以判断用户选择的是什么
     if(flag)
    
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改
  }
</script>
</HEAD>
<BODY onbeforeunload="exitSys…
[/Quote]

#6


最好不用要unload事件,并不是不起作用,是并不准确,还是设置超时比较好。

#7


引用 4 楼 net_lover 的回复:
没有100%成功的办法。所以不要通过这个方法做关键性的任务

#8


LZ你基本上可以放弃这个想法了 
除非你限制用户必须使用某种浏览器 如IE 那样就可以达到你的目的
<script language=javascript>  
   function window.onbeforeunload()  
   {  
   if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey||event.ctrlKey)  
   {  

        alert('关闭');  
    }  
   else{  
        alert("刷新");  
   }  
   }  
   </script>

#9


学习一下。这个问题。我也想解决。但是无从下手。
思路就是关闭的时候弹出JS,然后根据用户选择想服务器发送信息?

#11


引用 3 楼 Landor2004 的回复:
HTML code<HTML>
<HEAD>
<TITLE>xxx</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
<script>
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈
  function exitSystem(){
    alert("确认关闭xxx系统吗");
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改
  }
</script>
</HEAD>
<BODY onbeforeunload="exitSys…


在火狐和IE 6下测试了下,很管用呀。

#12


引用 11 楼 sherry521 的回复:
引用 3 楼 Landor2004 的回复:
HTML code <HTML> 
<HEAD> 
<TITLE>xxx </TITLE> 
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK"> 
<script> 
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈 
  function exitSystem(){ 
    alert("确认关闭xxx系统吗"); 
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改 
  } 
</scrip…

#13


mark

#14


万一从任务管理器中结束进程呢?或者死机重启了?呵呵。

我觉得应当监听session,并将session的失效时间设置为适当的时间。

#15


使用网页是无法做到的,劝楼主不要测试了

#16


如果大家有用163的话应该有经验,每次关邮箱的时候都会弹一个广告,我估计网易是使用js做的,楼主也可以试试使用js在用户关掉网页的时候发送一个请求到服务器。但是并不如保证能够发送成功,像楼上有人说的,会有死机啦,进程结束啦,这些情况的。
或者可以让页面每隔一小段时间给服务器发送一个请求,当超过多长时间服务器没有收到该用户的请求的时候,可以断定用户把这个网页关了。但如果这样的话,不能满足楼主说的第一时间了,不过当用户出现死机或者结束进程的话,还是可以知道网页被关了的。

#17


提供一个安全退出按钮

JAVA阵营     QQ群   68575630

#18


还是没人?

#19


为什么.回复.不可见?

#20


谢谢大家的积极发言
你们的想法和思想
都使我备受鼓舞
现在问题已经解决
就是像上面兄弟们说的
onunlaod和onbeforeunload都不能做到
折中的办法就是使用监听器
并把session设置为一个适当的时间
也许还有更好的方法
我将在不断的探索中去发现
希望有了真正的解决办法
能够与大家共享

#1


鉴于http为无状态协议,浏览器的关闭原则上服务器是不能获知的。
不知道楼主为什么一定要获知,描述一下需求或许对你的问题解决有帮助。
比如如果你想在关闭某个叶面时解锁,那么在关闭时可以用js提示一下,
也可以直接发解锁请求。
单纯所有叶面都要处理的情况我认为是没有的。
log信息一般也不需要记录这些

#2


可以用onunload的事件吧。不过能不能提交到后台,需要验证一下,另外要排除刷新的情况。

#3


<HTML>
<HEAD>
<TITLE>xxx</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
<script>
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈
  function exitSystem(){
alert("确认关闭xxx系统吗");
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改
  }
</script>
</HEAD>
<BODY onbeforeunload="exitSystem()">
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
</BODY>
</HTML>

#4


没有100%成功的办法。所以不要通过这个方法做关键性的任务

#5


HTML code<HTML>
<HEAD>
<TITLE>xxx</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
<script>
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈
  function exitSystem(){
    var flag=confirm("确认关闭xxx系统吗");//可以判断用户选择的是什么
     if(flag)
    
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改
  }
</script>
</HEAD>
<BODY onbeforeunload="exitSys…
[/Quote]

#6


最好不用要unload事件,并不是不起作用,是并不准确,还是设置超时比较好。

#7


引用 4 楼 net_lover 的回复:
没有100%成功的办法。所以不要通过这个方法做关键性的任务

#8


LZ你基本上可以放弃这个想法了 
除非你限制用户必须使用某种浏览器 如IE 那样就可以达到你的目的
<script language=javascript>  
   function window.onbeforeunload()  
   {  
   if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey||event.ctrlKey)  
   {  

        alert('关闭');  
    }  
   else{  
        alert("刷新");  
   }  
   }  
   </script>

#9


学习一下。这个问题。我也想解决。但是无从下手。
思路就是关闭的时候弹出JS,然后根据用户选择想服务器发送信息?

#10


#11


引用 3 楼 Landor2004 的回复:
HTML code<HTML>
<HEAD>
<TITLE>xxx</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK">
<script>
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈
  function exitSystem(){
    alert("确认关闭xxx系统吗");
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改
  }
</script>
</HEAD>
<BODY onbeforeunload="exitSys…


在火狐和IE 6下测试了下,很管用呀。

#12


引用 11 楼 sherry521 的回复:
引用 3 楼 Landor2004 的回复:
HTML code <HTML> 
<HEAD> 
<TITLE>xxx </TITLE> 
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=GBK"> 
<script> 
  //当点击浏览器的关闭按钮时,退出系统,并清除session,修改登陆标识,等等,当然也要排除刷新情况,哈哈 
  function exitSystem(){ 
    alert("确认关闭xxx系统吗"); 
    //location.href="xxx.do";//此处注释掉了,根据具体情况修改 
  } 
</scrip…

#13


mark

#14


万一从任务管理器中结束进程呢?或者死机重启了?呵呵。

我觉得应当监听session,并将session的失效时间设置为适当的时间。

#15


使用网页是无法做到的,劝楼主不要测试了

#16


如果大家有用163的话应该有经验,每次关邮箱的时候都会弹一个广告,我估计网易是使用js做的,楼主也可以试试使用js在用户关掉网页的时候发送一个请求到服务器。但是并不如保证能够发送成功,像楼上有人说的,会有死机啦,进程结束啦,这些情况的。
或者可以让页面每隔一小段时间给服务器发送一个请求,当超过多长时间服务器没有收到该用户的请求的时候,可以断定用户把这个网页关了。但如果这样的话,不能满足楼主说的第一时间了,不过当用户出现死机或者结束进程的话,还是可以知道网页被关了的。

#17


提供一个安全退出按钮

JAVA阵营     QQ群   68575630

#18


还是没人?

#19


为什么.回复.不可见?

#20


谢谢大家的积极发言
你们的想法和思想
都使我备受鼓舞
现在问题已经解决
就是像上面兄弟们说的
onunlaod和onbeforeunload都不能做到
折中的办法就是使用监听器
并把session设置为一个适当的时间
也许还有更好的方法
我将在不断的探索中去发现
希望有了真正的解决办法
能够与大家共享

#21