我要在jsp页面关闭是清空session,网上查了下发现几种方法不太好
1.利用onunload事件弹出一个新窗口来关闭session.
弊端:一些客户端IE设置会阻止弹出窗口,刷新好像也会运行onunload事件
2.要在关闭网站最后一个窗口时才关闭session
忘大虾能给出完美解决方案,最好有列子或源代码参考~
谢谢了啊~
明天要再解决不了,经理非把我T了不可~
在线等~急急~

解决方案 »

  1.   

    还是使用onunload,不过不弹出窗口,而是使用xmlhttprequest异步(ajax)提交请求到服务器,服务器销毁session
      

  2.   

    具体怎么实现啊?
    onunload加在哪里?怎么在关最后一个窗口时关闭session?
      

  3.   

    4.本网站要求session超时为30分钟
      

  4.   

    不要指望用Javascript在Window关闭时进行某些处理
    1) 虽然有 window.closed ,但是不要指望用 window.closed 来判断当前窗口是否被关闭了!(一般用来判断有名子窗口是否被父窗口成功关闭),不相信的话自己在onunload的handler里面写个alert (window.closed)去看看好了。
    2) onunload 事件的handler 不光在窗口关闭的时候,在页面被刷新的时候,通过HREF离开本页面的时候也都会被调用。而且IE之外的很多浏览器都不能正常支持这个事件,IE版本过低的时候,也会失效。
    (BTW, 前天写了一段javascript,onload和onunload事件都写好,通过两台WindowOS的PC,都安装着IE6.01,执行同样的javascript代码,一边正常执行了onunload事件的处理,另一边没能执行,原因至今是迷。)
    3) onbeforeunload 事件,和onunload一样,貌似只有IE支持该事件,不过感觉比onunload可靠些。(2)的那个问题,最终靠onunload->onbeforeunload搞定)
    4) 关闭IE的方法有:
        a)左键点击右上角X按钮
        b)ALT-F4
        c)CTRL-W
        d)左上方下拉菜单 File -> Close
        e)TaskBar右键单击Task,弹出的菜单->Close
        f)启动任务管理器,选中IE进程,强制终了
        g)关机,拔电源等等物理手段
     
    试着写出来在窗口被关闭时进行特定处理的javascript,但是最终没有被采用...
    function window.onbeforeunload()
    {
     if(((event.clientX > document.body.clientWidth) && (event.clientY<0))
      || event.altKey
      || event.ctrlKey)
     {
      alert("窗口被关闭了!");
     }
    }
    这段东西可以成功侦测到a,b,c,3类关闭窗口的动作。 但是c)的时候有问题,如果用户按下CTRL-F5的话,IE执行F5操作,页面被刷新...onbeforeunload的handler被调用...
    JavaScript可以侦测多数按键的KeyCode,但是无法取得CTRL/ALT/SHIFT组合键的KeyCode,所以无法准确判断Alt-F4,Ctrl-W。
    而剩下的defg四种关闭IE的方法,javascript鞭长莫及...
    最终结论,单靠Javascript无法在窗口关闭的时候进行特定处理。
    如果真碰到这样的业务需要的话,请考虑用Javascript以外的实现方案,比如采用JSP之类的动态网页技术。不要像本人一样浪费大好青春了...
      

  5.   

    客户端的事件是靠不住的(如非法关机,网络连接中断等),你应当结合cookie来实现,cookie可以设置关闭页面就过期的(默认值),因此,你应当先通过cookie判断在处理Session。
      

  6.   

    楼上的:
    客户端在IE的“工具”菜单下选择“Intertnet选项”的“安全”,按自定义级别,将Cookie部分设为关闭,那怎么办?
      

  7.   

    实在不放心客户端,干脆禁止cookie,统统使用 URL 重写来传递sessionID 保持会话,一了百了。
      

  8.   

    csdn真没高手了么?再等一天就结贴!
      

  9.   

    javascript能干的JSP也能 需求写死了!
      

  10.   

    没有Cookie,你的Session也就没有用了。Session是依赖 Cookie的,
    asp.net里倒是有禁止cookie的方法,是将cookie放到了url里
      

  11.   

    web.xml
    <!--session过期时间设成1分钟-->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>all.jsp
    <!--所有jsp页上加如下代码-->
    <script>
    var s=30,x=0,rurl="remain.jsp";
    //30分钟内30秒连一次网站,保证session有效
    function f(){
    var httpRequest = new ActiveXObject("microsoft.xmlhttp");
    httpRequest.open("GET", rurl, false);
    httpRequest.send(null);
    x++;
    if(x<60){
      setTimeout("f",s*1000);
    }
    }
    f();
    </script>remain.jsp
    <!--无意义页,只为f()提供一个连接页-->
    <html></html>
      

  12.   

    to:dreamover(梦醒了〖http://hellfire.cn〗
    4.本网站要求session超时为30分钟
      

  13.   

    to: net_lover(【孟子E章】)
    没有Cookie,你的Session也就没有用了。Session是依赖 Cookie的,
    ------------------------------------------------------------
    cookie是客户端的,session是服务器端的,
    Session是依赖 Cookie的?想不通!
    准备再开帖讨论下session 和cookie?
      

  14.   

    能不能这样 如果你定义的session不活动时过期时间为60分钟 能不能在第59分钟时候去修改用户状态
      

  15.   

    我写的是模拟30分钟超时的如果要session-timeout设为30分钟,这个问题根本就是没法解决的,你难道能让母鸡下出鸭蛋?钻死牛角尖的家伙
      

  16.   

    我感觉很奇怪.session就是一个用户与服务器的一个会话,他把页面关了.session不是自然就结束了吗?还用去关闭吗?是不是我有什么知识没学到啊?
      

  17.   

    把当前页面换成了另外一个页面时也会执行onunload的方法
      

  18.   

    想不通?
    Session虽然是在服务器端,但页面访问过后是与服务器端打开的,也就是说,服务器不知道下一次是否是一个人。靠什么记住是一个人?Session 传递一个SessionID到客户端,就是这个Cookie值记住的,
    你可以alert(document.cookie)看看你的页面是否有一长串的数字