在开发web应用程序的时候登录功能通常把session寄放在一hashtable中。如果用户太长时间没操作导致session失效。那么久需要进行自动登出操作。但问题是如何判断session失效呢。
网络上使用isNew()等方法是再session失效后再生成一个新的时候使用的。对于判断已经失效的session本人采用以下方法:在session失效后对其进行isNew或者其他方法调用时会抛出IllegalStateException异常。我们尝试去捕捉这个异常。在catch里面就可以写你想要执行的操作了。
try{
String a=(String)((HttpSession)sessionTable.get(id)).getAttribute("name");
}catch(IllegalStateException e1){
logoff(id);
} 方法可能还有很多不完善的地方,希望大家提出。

解决方案 »

  1.   


    if(request.getSession(false)==null){
       System.out.println("Session has been invalidated!");
    }else{
       System.out.println("Session is active!");
    }
      

  2.   

    session是不会为null的,这个不知道是怎么回事.!
      

  3.   

    [Quote=引用 1 楼 dr_lou 的回复:]写监听吧。
    这个可以,但是当使用ssh框架的时候,在登出是需要对数据库进行改写,使用listener就不太好用
      

  4.   

    这个方法前提是要获得request。 在ssh中如果没有继承ActionSupport,很难获取request
      

  5.   


    使用监听,登出的时候,你只需要让session失效,而所有的session失效都会被监听捕获,在session监听中,session失效时,对数据库改写不就好了?
      

  6.   

    这个我也想过,但是listener似乎很难给spring管理
      

  7.   

    ServletActionContext.getRequest() 在公共类中是获取不了对象的吧
      

  8.   

    监听可以--
    session没有时间管理?偶忘了。
      

  9.   

    SessionListener如果关闭浏览器就不会进行处理的。。也是个麻烦
      

  10.   

    我的处理方法是 写一个线程去判断sessiontable中的session是否到期。这样也是一种实现
      

  11.   

    还有一种办法就是用AJAX去定时调用文件读取SESSION,比如说5分钟一次,如果SESSION里面是空的,然后就自动跳转到登出页面
      

  12.   

    写一个线程去判断sessiontable中的session是否到期。这样也是一种实现
    同理
      

  13.   

    用HttpSessionBindingListener来监听