session 设置有效时间 or 一直null值问题

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖一点雨

原创不易,鼓励鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值