一个判断session是否过期的小技巧

Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下!

 

1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数

 

2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?

   答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。

         从该Session未被访问,开始计时; 一旦Session被访问,计时清0;

 

3.设置session的失效时间

 a)web.xml中

 

Xml代码   收藏代码
  1. <session-config>    
  2.     <session-timeout>30</session-timeout>    
  3. </session-config>   

 b)在程序中手动设置

    session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期

c)tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:

Xml代码   收藏代码
  1. <Context path="/livsorder" docBase="/home/httpd/html/livsorder"  
  2.   defaultSessionTimeOut="3600" isWARExpanded="true"  
  3.   isWARValidated="false" isInvokerEnabled="true"  
  4.   isWorkDirPersistent="false"/>  

 

4.如何判断session过没过期

request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。
这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:
if(request.getSession(false)==null)
   System.out.println("Session has been invalidated!");
else
   System.out.println("Session is active!");

可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。
这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null,原因我想大家应该是显然的。


[java]  view plain  copy
  1. private boolean checkSession(   HttpServletRequest request,  
  2. HttpServletResponse response) {  
  3. HttpSession session = request.getSession(false);  
  4. String requestURI = request.getRequestURI();  
  5. String contextPath = request.getContextPath();  
  6.   
  7. requestURI = requestURI.substring(contextPath.length());  
  8.   
  9. if(requestURI.equals("/") ||  
  10. requestURI.equals("/login.jsp") ||  
  11.     requestURI.equals("/login.do")  ||  
  12.     requestURI.equals(this.errorPage))  
  13. return true;  
  14.   
  15. if(session != null   
  16. && session.getAttribute(this.objName) != null   
  17. && session.getAttribute("year") != null)  
  18. return true;  
  19. else   
  20. return false;  
  21. }  



比较好的一个办法

[java]  view plain  copy
  1. //request.getSession(false)==null可以近似的判断是否过期:如果已经过期,那么返回的是null,但是当起一次请求,刚刚建立一个session的时候,上述方法也返回null   
  2. //所以应该这个做   
  3. if(null==request.getSession(false)){   
  4.    if(true==request.getSession(true).isNew()){   
  5.       }   
  6. else{   
  7. System.out.println("session已经过期");   
  8. }   
  9. }  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值