是这样的,今天在写一个页面的时候在想。如果是类似IE7(8)这样的在标签页里打开网页。登陆后,当用户通过叉掉标签页而不是通过注销按钮来退出网页的话,怎么才能在用户叉页面后就自动发一个信息来注销。因为大家可能都知道的,在多标签叶状态下,如果只是关闭了当前标签页而不关闭浏览器的话。输入刚刚关闭的页面的URL是能正常返回到刚才的页面的。
    搜了下资料。有的说用<body onunload="...">试了。当刷新时onunload事件就发生了,onbeforeunload就更不用说了,也就是说每当用户刷新页面时onunload就发生一次,显然用这种方法是不能达到目的的。用window.activematch('onunload', function(){...})也是不行的。其实说白了,就是怎么来获取标签页关闭事件,只要能获取到就可以在发生该事件前提交一个注销请求,自然关闭了标签页,也就自动注销了。输网址或是浏览器的返回也就没用了。
    问:大家知不知道怎么获取浏览器标签面关闭事件?

解决方案 »

  1.   

    <script type="text/javascript">       
        window.onbeforeunload = onbeforeunload_handler;   
        window.onunload = onunload_handler;   
        function onbeforeunload_handler(){   
            return "确认退出?";   
        }   
        function onunload_handler(){   
            alert("谢谢光临");   
        }   
    </script> 
      

  2.   

    刚才又仔细看了下 标签面关闭事件参考下http://xufei0110.javaeye.com/blog/190029
      

  3.   

    2楼的方法,看了。没用:
    <html>
    <head>
    <title></title>
    <script language=javascript>   
    function window.onbeforeunload()   
    {   
    if(event.clientX>document.body.clientWidth&&event.clientY<0||event.altKey||event.ctrlKey)   
    {   
         //判断event.altKey是为了Alt+F4关闭的情况;判断event.ctrlKey是为了Ctrl+W关闭的情况   
         //document.body.clientWidth不包括滚动条,而关闭按钮恰好在滚动条右侧。   
        alert("1"); 
        window.event.returnValue="";   
        alert("2");
    }   
    }   
    </script>  
    </head>
    <body>
    hello
    </body>
    </html>
    按alt出来菜单栏(我的IE关闭了菜单显示),按ctrl+F4弹出2个alert框1个关闭确认,ctrl+w弹出2个alert框1个确认,但是直接用鼠标叉(×)就什么反应都没有。我的意思是当用户用鼠标去叉(以关闭)标签面时才发生的事件。如果有一个alert的话,要来它在刷新(加载)页面时不出现,当且仅当叉标签页时才出现。
      

  4.   

    1楼的就不说了。说了onunload和onbeforeunload在页面刷新时都会发生,如果用这个的话,用户不是刷新一次就要重新登陆一次了。
      

  5.   

    这个问题一直以来都比较棘手 期待高手解决
    http://topic.csdn.net/u/20081014/16/c6c01d4e-7e07-4746-a0f2-53f5b40ed773.html
      

  6.   

    使用js。跳转到一个注销用户的php脚本文件
      

  7.   

    我也是菜鸟,可以当点击[X]的时候 用ajax发送立即过期COOKIE 或SESSION 吗 
      

  8.   

    也许可以用数据库结合cookie保存在线状态,比如表 uid ,lasttime;登录用户每次访问网站,就检查是否在线,如果在线就更新lasttime时间字段。服务器端做个计划任务,隔一段时间就清理掉比如30分钟没操作的用户在线状态。怎么做计划任务,可以参考uchome或者supesite。这样做也能保证一个账号只能一个用户登录。用js不是很好用;
      

  9.   

    N久以前就做过,我哦也很想知道怎么解决最好??
    点关闭按钮,ALT+F4,任务栏右键关闭,标题栏右键关闭,任务管理器关闭。
    好象就这么多了。
      

  10.   

    现在的问题是如何识别“单击标签页的X”这个事件,只要正确识别了就没有问题了。现在是这么一种情况:不管是[X]掉,还是刷新,都是同一个事件,这就不行了,因为你不知道用户到底是在刷新还是[X]了标签。总不能每次刷新都要重新登陆吧。