在你登录一个页面时候,,去session中的值,,若是能取到,那么说明这个session还没有失效,,若是取到为null,则说明session已经关闭,,令做处理。

解决方案 »

  1.   

    可以在结束页面之前调用invalidate()方法毁掉它。
      

  2.   

    生存周期就是你设的那个时间!随着该页的关闭,该页session消失。但一开始得到session的其它页面,session依然有效.新打开的ie将不受影响!
      

  3.   

    <body onbeforeunload="window.location='xx.asp'">
    xx.asp为清除session的页面
      

  4.   

    如何判断该session存在,而浏览器已经被关闭呢?问题就是这样:
    1.如果我在打开的一个页面基础上,在新窗口中打开N个界面,这些页面是同一个session,如果,我关闭某个页面时invalidate 这个session,其他页面也就不能访问了(检测session中某个值存在才能访问)。因此该方法我不能采用。
    2.不能将session timeout 的时间变短。因为有的页面要做大量的录入工作。
    3.不能采用将session timeout变短,加自动刷新页的办法。因为这样做工作量太大。(已有系统)
    4.现在采用方法,实现HttpSessionListener接口。问题在sessionDestroyed只有在timeout时间到的时候才会触发,而关闭该session全部浏览器窗口不会触发。
      

  5.   

    如果你把得到session的所有页面都关了。
    该session肯定就消失了,无论你设的时间有多长!session.removeValue("sessionname");
    你可以随时让sessionname消失。
      

  6.   

    补充:
      是让sessionname值为null。
    :)不知楼上有何高见?洗耳恭听!
      

  7.   

    zxhong,
    试验我做过了利用HttpSessionListener.关闭所有页面后并没有触发sessionDestoryed, 同时因为我在session创建的时候将它放入vector,因此,我还可以取得session中属性的值,判断session应该还有效。
    只有到timeout时间到以后才触发了sessionDestoryed.这时候就取不到session中属性的值了(尝试取抛出异常),判断session失效。julyclyde(从ASP转向CPP,到处都是P)
    不是说session.removeValue("sessionname");错,而是说“如果你把得到session的所有页面都关了。该session肯定就消失了,无论你设的时间有多长!”没有办法吗?
      

  8.   

    我估计你想做的事情是:当用户非法退出系统时,自动进行签退操作--可能你需要进行一些清理工作。我也遇到过同样的问题,当时我是这样解决的:
    首先,在用户登陆系统时,将用户的session id以及相关信息保存在一个哈希表中。
    同时,在一个全局servlet(我就是用的一个登陆系统必须经过的servlet)中,启动一个自己编写的线程类,这个类的工作就是每隔1分钟扫描一次所有的session,看其是否有变化,如果有,则将该session的一个表示静止时间的属性清零,否则在该时间上加1。然后判断该属性值是否已经到达超时时间,如果是,则进行自动签退操作,否则什么都不做。不知道有没有帮助到你哦:)