曾经有个linux高手同事,直接修改apache的源代码获得浏览器上面的那个"X"的get事件解决过这种问题。

解决方案 »

  1.   

    刚才试了一下。
    <html>
    <head>
      <title>
      </title>
    </head>
    <body onload='alert("aaaa")' onunload='alert("bbbbb")'>
    </body>
    </html>在窗体的onload/onunload 事件都可以正常触发,并输出aaaa,bbbbb还有楼上说的
    “如果在任务栏点右键关闭,这个js是捕捉不到的”
    是可以捕捉到的!
      

  2.   

    ignore_user_abort --  Set whether a client disconnect should abort script execution
      

  3.   

    onunload怎么调用php的ssessionn_unset()????
    给个例子
      

  4.   

    本来想用onunload事件调用一个函数。
    然后在函数里去session_unset().
    不过在试验的过程中,
    发现PHP在解释语句时,
    就已经将session unset 了。。
    而不是像想像中的那样。在关页面时才unset..这方法不行~~~~~~~~~本人正在考虑另一种方法。。
    将Session和Cookie结合起来,来失现。。
    不知结果如何~~~~
      

  5.   

    真奇怪的要求。一般来说页面关闭了session就失效了。
      

  6.   

    用这个方法吧:页面中放个小iframe,用JS每过一会就刷新一次,通知服务器人还在服务器那里放个变量存放最后一次通知的时间等要用到session的时候,检查“此刻时间 减去 时间变量”,相差大于1分钟就破坏session
      

  7.   

    <html>
    <head>
      <title>
      </title>
    </head>
    <body onload='alert("start!")' onunload='someAjaxFunction();'>
    </body>
    </html>然后在你的someAjaxFunction()中完成对服务端的调用。。就学么简单。不过俺不用PHP,不知道具体PHP如何写,不过应该jsp, aspx差不多
      

  8.   

    ShadowSniper(欲练神功...(摘自《葵花宝典》)) ( ) 信誉:96    Blog  2006-12-4 11:10:01  得分: 0  
     
     
       
    曾经有个linux高手同事,直接修改apache的源代码获得浏览器上面的那个"X"的get事件解决过这种问题。  
     
    一看就是不懂装懂的,按X是不会有什么GET事件的,用js的onunload才是正解
      

  9.   

    >曾经有个linux高手同事,直接修改apache的源代码获得浏览器上面的那个"X"的get事件解决过这种问题。这人真高啊,
    竟然能修改服务器端程序解决客户端局限的问题
    哈哈哈哈哈哈哈
    振兴中国IT的希望就寄托在这些高手身上了
      

  10.   

    1、<body onbeforeunload="LeaveWin()">2 <head>之间 加入!
        <script language=javascript>
        function LeaveWin()
        {
            alert("关闭");
         }
        </script>
      

  11.   

    曾经有个linux高手同事,直接修改apache的源代码获得浏览器上面的那个"X"的get事件解决过这种问题。
    =======================
    同意楼上的楼上,不过说这句化的人意思可能是浏览器在被点"X"关闭时发了一个get请求,通过这个get请求来invalidate session,不过事实上我没有截获这个get请求!!!
      

  12.   

    即使是楼上所说的get请求,也没必要让apache来做这件事情,这不是apache该做的
      

  13.   

    其实很简单的,在 onunload事件里面调用一个异步请求(比如Ajax),执行一个清除Session的页面程序就可以了,我们最近做的程序就是这样用的。
      

  14.   

    用onunload是不行的。。
    请大家看下面的例子。
    session.php:<?php
    session_start();
    $_SESSION["A"]="AA";
    ?>
    <a href=session2.php>aa</a>
    session2.php<?php
    session_start();
    ?>
    <html>
    <head>
    <script language="javascript">
    function onClose()
    {
    alert("begin");
    <?php
    unset($_SESSION["A"]);     //当程序解释到这句话时,就给session失效了(并不是等到关闭                        
                               // 时)。。所以下面的页面 
    ?>                        //将在5秒后,自动刷新,而不是显示session的值。在关闭窗体时,  
    alert("end");                //它也正常的弹出'begin','end'!  所以我认为弄onunload不行。。
    }
    </script>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    </head>
    <body onUnload="onClose()">
    <?php
    if($_SESSION['A']=='')    //==后面是二个单引号
    {
    echo '请从面session.php过来。将自动刷新!'."<br>";
    echo'<meta http-equiv="refresh" content="5;url=session.php">';
    }
    else
    {
    echo 'seesion的使用。';
    echo $_SESSION["A"];
    }
    ?>
    </body>
    </html>Ajax,以前没接触过。
    试试~~
      

  15.   

    那你完全可以把js函数放到php结束标记下面
      

  16.   

    onunload 和 IE专有的onbeforeunload都不能实现楼主的办法,原因是刷新当前页时也会触发onunload事件,
    换个思路来解决:
    onunload中触发事件,用ajax立即通知服务器端,服务端得到消息后开始倒计时,如果客户端不是关闭浏览器触发onunload事件,比如按了下F5刷新当前页,那就在刷新后在onload事件中再次通知服务端——“我”回来了。服务端得到消息后中端倒计时;如果是真正的关闭浏览器,倒计时时间到后让session失效,至于倒计时的时间完全可以根据客户端的访问速度来决定
      

  17.   

    onunload 方法行不通。
    1:刷新处理。
    2:如果打开多个窗口,如TT,那么我关闭一个,岂不是都注销了。
      

  18.   

    对!刷新也触发了onunload!楼上说的好!
      

  19.   

    这个问题是捆扰我一年的问题,至今还不能解决
    在IE中,可以用onunload或者onbeforeunload,但是对多窗口浏览器如maxthon是无效的
    ---
    不过我发现下面这个聊天网站,假如你同时打开两个一样的聊天室,无论是用单页面还是多页面浏览器
    然后再关闭另外一个
    则剩下的那个聊天室会立即显示您的"替身"已经离开
    明显是捕捉到了关闭事件
    ------
    但是这个代码找不到,不知道是如何实现的
    有兴趣的可以去实验下
    http://www.vqq.com/inset/201.html
      

  20.   

    duduwolf(嘟嘟狼) 的方法实行得通的。http://www.vqq.com/inset/201.html我测试过了,
    没什么蹊跷在里面,她只不过使用了一个隐藏的Iframe来捕获onunload事件。如果你开2个窗口,在网速特别慢的情况下,去刷新任何一个窗口,在刷新过程中,另外一个窗口
    会显示有一个人离开了,当完成刷新时,没有刷新的那个窗口有会显示多了一个人,但是你会发现,之前消失的那个人的ID和后来显示的那个人(其实应该是同一个人,因为我在另外一个窗口刷新了)的ID不一样!
      

  21.   

    <script language=javascript for=window event=onunload>
    if(event.clientX<0&&event.clientY<0)
    {
    alert('关闭');
    }
    else
    {
    alert('刷新');
    }
    </script>
      

  22.   

    lurenfu(我是你的男佣) ( ) 信誉:100    Blog  2006-12-6 10:50:24  得分: 0  
     
     
       
    ShadowSniper(欲练神功...(摘自《葵花宝典》)) ( ) 信誉:96    Blog  2006-12-4 11:10:01  得分: 0  
     
     
       
    曾经有个linux高手同事,直接修改apache的源代码获得浏览器上面的那个"X"的get事件解决过这种问题。  
     
    一看就是不懂装懂的,按X是不会有什么GET事件的,用js的onunload才是正解  
     
    -----------------------------------------------------------------------是我描述错误,是当用户按X的时候,向apache发送一个请求,他具体怎样修改的我不知道,不过他的确是做到了.
    我那个同事不懂web编程,也不会js,直接修改的apache的源码重新编译,他就使用了这种方式去实现,不管方法妥不妥,至少他确实实现了.PS:不要跟这倚老卖老,别人都tm不懂,你很懂是吧,方法好不好我没说,我只是来描述人家通过这种方法实现了.