session 设置有效时间 or 失效问题
1.前言
a.session差不多就是指会话,指的是用户浏览某个网站或者登陆某个管理系统的时候,从登陆进入到关闭浏览器,这个时间就是session的时间。
b.session 针对于不同的用户,不同的浏览器,是不同的。
c.最近在练习一个java web 项目的时候,需要判断session是否过期来提示用户登录失效和查询用户个人信息问题。
2.判断session是否失效?>
采用的是:request.getSession(false) 来判断session是否为null,由此来提示session过期否。//判断session是否过期
if(request.getSession(false)==null){
System.out.println("Session 已失效!");}
else{
System.out.println("Session 有效!");}
但是!!!
后来发现出现一个问题,就是判断的session得到的值一直不为null?
百度搜索一下:
关于getSession()这个方法:
(1) getSession(true) 如果当前session不为null,会返回该session,如果为null,会创建一个session也就是说这个方法和getSession()是等效的
(2) getSession(false),当session不为null时,返回该session,如果session为null,则该方法会返回null,
于是进行测试,首先在web项目的web.xml中设置了session的有效时间:
<!--设置30秒有效时间-->
<session-config>
<session-timeout>1/2</session-timeout>
</session-config>
这个 1/2指的是30秒,我设置了session有效时长为 30秒。
然后在java文件里面写:
HttpSession session = request.getSession();
System.out.println("上一次访问session的时间"+new Date(session.getLastAccessedTime()));
System.out.println("session的有效时长:"+session.getMaxInactiveInterval());
if(session==null){
System.out.println("session为空");
}
得到的有效时间是30秒,得到的上一次访问时间也超过了30秒,然而就是不能打印出session为空这句话,由此判断session不为空,但是时间已经超过了30秒。
session一直为null的原因如下:
在运行jsp页面时,会被tomcat 编译成class文件,在jsp中首先调用了getSession()方法,已经创建了一个session, 通过jsp再去访问servlet或者action, request.getSession(false) 是不能得到null的。
解决方法:
在jsp页面的头部加上:
<%@ page session="false"%>
这样就使得网页,禁止jsp自动创建session。
3.设置session有效时间
一、 在程序中调用session的setMaxInactiveInterval方法设置:
java页面下写入:
session.setMaxInactiveInterval(30*60);
setMaxInactiveInterval设置的是当前会话的失效时间,这不是整个web的时间,单位为以秒计算。如果设置的值为零或负数,则表示会话将永远不会超时。
二、在web.xml中的session-config配置
session-timeout元素用来指定默认的会话超时时间间隔,以分钟为单位。
该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。如,设置session失效时间为30分钟:
在自己项目的web.xml文件下任意位置加入:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
三、直接在应用服务器中设置
如果是使用tomcat服务器,可以在tomcat的安装目录下找到xxx/conf/web.xml ,其中找到元素,tomcat默认设置是30分钟。
<session-config>
<session-timeout>30</session-timeout>
</session-config>