比如setMaxInactiveInterval(60)是对60秒内不做任何操作就删除session,还是无论有没有操作,都在60秒以后删除session?

解决方案 »

  1.   

    楼主又是双发?从性能上考虑,应用服务器一般都不是立即删除,而是定期回收。但每次访问session之前都会做超时检测,也就是说,只要超过60秒,即便应用服务器还没真的回收这个session,但也会立即将其作废掉。补充下,你可以借助HttpSessionListener,在会话失效时会触发这个事件,然后你可以打印出来,就能知道会话被实际回收的时间了,跟你设置的时间并不是严格一致的。
      

  2.   

    我也不愿意双发呀,我的分数
    我知道时间是又差异的,上面只是打个比方。
    httpsession有没有一个方法可以在某段时间内指定删除某个已知的session
      

  3.   


    没有要么就是用超时时间控制,然后应用服务器定期回收;要么就是主动invalidate(),后者立即生效。但其实我觉得你不需要关心这个问题吧:“某段时间内指定删除某个已知的session”?能说明下你期望的应用场景么?
      

  4.   

    setMaxInactiveInterval(60) 60S内不做任何事情,Session就失效。比如,你刚登录了系统,接着跑去财务部收钱,70S后回来,再继续操作系统,这时应该会提示重新登录。
      

  5.   

    比如短信验证码在5分钟内失效,我的方法是用一个map,把验证码和创建时间存入,然后把该map存入session,当客户端发回验证码时,对比时间,如果超时删除该session,并提示验证码超时。所以不能用setMaxInactiveInterval(),因为它是让整个session失效,是验证码失效不可能让用户还要重新登录吧所以呢,想找个比我的方法更简单的方法
      

  6.   

    如果只是这个的话,我觉得不需要特别去设计验证码超时回收这个验证码空间,整个场景可以分为三种情况:
    1、5分钟之内输入了验证码:检查通过,就把session中的验证码清掉,用session.removeAttribute();检查不通过,重新生成验证码,并返回错误提示并要求重新收取验证码;
    2、超过5分钟输入了验证码:检查时顺便检查验证码的生成时间,超时则把session中验证码清掉,并返回错误提示;
    3、直接忘了这事情了,浏览器早就关闭走人了:session会在30分钟后超时,超时的时候,整个session都会被回收掉,所以也不用去特别处理啥了。