一个web系统,用户登录进来,session存值。发起一个批量请求,正在操作过程中的时候,用户退出 
退出功能执行了清空session方法
this.getSession().clear();this.getRequest().getSession().invalidate();请求在未完成的情况下被终止了。我想请问这种情况下,我希望请求继续执行,但是不清空session的话,长期保持是否又会有影响?这个请求可能要执行几个小时,我的session有效期是30分钟。
如果我不进行退出操作,在30分钟后,是不是同样会丢失session并且请求被终止呢?要怎样让这两个点分离开?

解决方案 »

  1.   

    session被销毁,里面的信息就访问不到了。未完成的请求,会在某次 getSession中的属性时,得到 null,从而导致失败。
    如果你想要请求能继续完成,那么处理代码在最开始就要把所需数据从session中弄出来,只要保证后续计算不依赖于session,而且不需要对response做任何输出,这个请求会一直执行到结束为止,不会被容器强行终止。
      

  2.   

    你可以通过session的listener监控到session被清空(sessionDestroyed()事件),然后就很容易啦。把数据从session中取出或者重新设置session生效。
      

  3.   


    可能理解有误,我的数据并没有每次都从session中拿(我指的是java代码中getSession的操作)
    通过请求到达action后就是循环操作数据库(我模拟的环境是循环操作内存)
    我试过new Thread  但是session在被clear后,请求就被中断了
      

  4.   


    卧槽丢死人了,我测试的时候是循环在session中拿的操作人,所以一直在循环拿session
    当session没了就挂了问题解决了,谢谢各位