日期:2014-05-17  浏览次数:20694 次

来个有深度的问题,谁来帮我分析下
一个web系统,用户登录进来,session存值。

发起一个批量请求,正在操作过程中的时候,用户退出 
退出功能执行了清空session方法
this.getSession().clear();this.getRequest().getSession().invalidate();

请求在未完成的情况下被终止了。

我想请问这种情况下,我希望请求继续执行,但是不清空session的话,长期保持是否又会有影响?

这个请求可能要执行几个小时,我的session有效期是30分钟。
如果我不进行退出操作,在30分钟后,是不是同样会丢失session并且请求被终止呢?

要怎样让这两个点分离开?

------解决方案--------------------
session被销毁,里面的信息就访问不到了。

未完成的请求,会在某次 getSession中的属性时,得到 null,从而导致失败。


如果你想要请求能继续完成,那么处理代码在最开始就要把所需数据从session中弄出来,只要保证后续计算不依赖于session,而且不需要对response做任何输出,这个请求会一直执行到结束为止,不会被容器强行终止。
------解决方案--------------------
需要执行这么长的时间,你做成一个后台任务不行么,当用户执行该操作时,就是发起了一个后台任务,让它在后台慢慢跑,执行执行完之后给你一个反馈消息
------解决方案--------------------
你可以通过session的listener监控到session被清空(sessionDestroyed()事件),然后就很容易啦。把数据从session中取出或者重新设置session生效。