session详细分析(是否过期、过期时间) ) ) ) ) ) ) ) ) ) )。
Session在我们做web项目时很常用,以前我不太在意,但这次我又仔细看了一下!
1.session其实是一个Map,它是一个键=值对,包含session.getattribute('name ); 获取在session中设定的参数
2.session的有效期是从什么时候开始计算的? 是一注册就开始计算,还是从停止活动开始计算?
a )从会话不活动时开始计算,如果会话一直活动,会话很难过期。
从该Session未被访问开始计时; 当Session被访问时,时间清零0;
设定会话的有效期限
a )在web.xml中
30//单位为分钟
b )在程序中手动设置
session.setmaxinactiveinterval (30 * 60 ); //设定单位为秒,设定为-1也不会失效
c ) tomcat还可以更改会话的到期日期。 在server.xml中定义上下文时,请按以下方式定义:
如何判断session是否过期
1 )以前是根据if(session.getattribute ) user )==null )来判断是否为空
=========================================================================================
2 )确定session非空的好方法是:
request.getseesion(boolean )方法吓了我一跳。 将布尔值传递给此方法。 如果该值为true,则如果当前request的session不可用,则创建新会话,如果存在,则返回当前会话。 如果参数为false,则在request的当前会话不存在时返回null。
由此,能够简单地联想到该被称为请求的当前会话是否存在与session的有效期限的关联,因此能够“近似地”认为不存在session是session的有效期限。 方法如下。
请求. getsession (false )==null
system.out.println (sessionhasbeeninvalidated! ' );
}else{
system.out.println (sessioni sactive! ' );
}
你可能注意到我上面有“近似地”这个词,也就是说有特殊的情况。
这种特殊情况是第一个请求尚未创建会话时,通过这种方式返回的仍然为空。 我觉得理由很明显。
很多人认为应该使用javax.servlet.http.httpsessionbindinglistener接口实现类似的功能。
他们的意思是在创建session时使用session.setattribute('isactive ',' yes ' ); 只要session没有过期,就可以用session.getAttribute(isactive )==null来判断。 但是,使用过期的session.getattribute ) )方法时会抛出Java .因此无法使用此方法
当然,也可以在session过期时这样处理。 HttpSessionBindingListener接口的onValueUnbound )方法设置flag以指示session已过期,然后使用此flag。 请务必将此标志放入应用程序中。因为APP是HttpServletContex类的对象,所以必须在此标志中输入有关哪个session已过期的信息。 这样的话,整个过程就会非常麻烦。
关于通过监听器实现的事情我要补充一点。 我的方法是站在某个session的立场上实现的。 要监视多个session,需要站在应用程序的立场上进行分析。 此时的最佳选择是HttpSessionBindingListener或HttpSessionListener。
这篇文章的目的是让大家在需要判断的时候(无论session是否过期都OK ),用这样的话很容易实现功能,但不会涉及意思。
来自: https://blog.csdn.net/shenqing keji/article/details/55258089和http://www.edu city.cn/wenda/121809.html