一个判断session是否过期的小技巧
2017-08-01 14:29
483 查看
见:http://blog.csdn.net/sd4015700/article/details/39340485
Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下!
1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数
2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?
答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。
从该Session未被访问,开始计时; 一旦Session被访问,计时清0;
3.设置session的失效时间
a)web.xml中
Xml代码
<session-config>
<session-timeout>30</session-timeout>
</session-config>
b)在程序中手动设置
session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期
c)tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:
Xml代码
<Context path="/livsorder" docBase="/home/httpd/html/livsorder"
defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
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
print?
private boolean checkSession( HttpServletRequest request,
HttpServletResponse response) {
HttpSession session = request.getSession(false);
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
requestURI = requestURI.substring(contextPath.length());
if(requestURI.equals("/") ||
requestURI.equals("/login.jsp") ||
requestURI.equals("/login.do") ||
requestURI.equals(this.errorPage))
return true;
if(session != null
&& session.getAttribute(this.objName) != null
&& session.getAttribute("year") != null)
return true;
else
return false;
}
比较好的一个办法
[java] view
plain copy
print?
// request.getSession(false)==null可以近似的判断是否过期:如果已经过期,那么返回的是null,
// 但是当第一次请求,刚刚建立一个session的时候,上述方法也返回null
//所以应该这么做
if(null==request.getSession(false)){
if(request.getSession(true).isNew()){
}
else{
System.out.println("session已经过期");
}
}
isNew()是指是否一个新创的session,当用户访问一个支持session的jsp网页时,session被创建,尽管有时session里面并没有任何东西。
Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下!
1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数
2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?
答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。
从该Session未被访问,开始计时; 一旦Session被访问,计时清0;
3.设置session的失效时间
a)web.xml中
Xml代码
<session-config>
<session-timeout>30</session-timeout>
</session-config>
b)在程序中手动设置
session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期
c)tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:
Xml代码
<Context path="/livsorder" docBase="/home/httpd/html/livsorder"
defaultSessionTimeOut="3600" isWARExpanded="true"
isWARValidated="false" isInvokerEnabled="true"
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
print?
private boolean checkSession( HttpServletRequest request,
HttpServletResponse response) {
HttpSession session = request.getSession(false);
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
requestURI = requestURI.substring(contextPath.length());
if(requestURI.equals("/") ||
requestURI.equals("/login.jsp") ||
requestURI.equals("/login.do") ||
requestURI.equals(this.errorPage))
return true;
if(session != null
&& session.getAttribute(this.objName) != null
&& session.getAttribute("year") != null)
return true;
else
return false;
}
比较好的一个办法
[java] view
plain copy
print?
// request.getSession(false)==null可以近似的判断是否过期:如果已经过期,那么返回的是null,
// 但是当第一次请求,刚刚建立一个session的时候,上述方法也返回null
//所以应该这么做
if(null==request.getSession(false)){
if(request.getSession(true).isNew()){
}
else{
System.out.println("session已经过期");
}
}
isNew()是指是否一个新创的session,当用户访问一个支持session的jsp网页时,session被创建,尽管有时session里面并没有任何东西。
相关文章推荐
- 【小技巧】一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧_Java
- 一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧
- 一个判断session是否过期的小技巧
- 判断一个session是否过期
- ASP.NET Session丢失问题解决方案总结及判断Session是否过期【转载】
- [每天一个Linux小技巧] 判断CPU是否64bit
- ASP.NET Session丢失问题解决方案总结及判断Session是否过期【转载】
- 判断session是否过期
- ASP.NET Session丢失问题解决方案总结及判断Session是否过期
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- asp.net 判断session是否过期
- 判断session是否过期
- 判断用户session 是否过期,如果过期,让用户重新登录
- Asp.net中的一个判断session是否合法的做法