设置session有效时间的三种方式

 更新时间:2023年05月11日 10:15:05   作者:晚期键怒症患者  
这篇文章主要介绍了设置session有效时间的三种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

设置session有效时间的三种方式

session的默认有效时间是30分钟(min)

方法一

使用java函数:session.setMaxInactiveInterval()

举例:

设置的有效期是30分钟(min)

session.setMaxInactiveInterval(30 * 60); //30分*60秒

注意:以秒(s)为单位。

如果设置的值为零或负数,则表示会话将永不超时!

方法二

在项目中web.xml的session-config中配置

举例:

设置有效期为30分钟(min)

<session-config> 
    <session-timeout>30</session-timeout>
</session-config> 

注意:以分钟为单位,必须为整数。

如果 session-timeout元素的值为零或负数,则表示会话将永不超时!

方法三

直接在应用服务器中设置

举例:

在tomcat安装目录中conf/web.xml找到<session-config>元素,tomcat默认设置是30分钟。

注意:以分钟为单位,必须为整数。

如果 session-timeout元素的值为零或负数,则表示会话将永不超时!

这三种方法设置session有效期的优先级(此处优先级指的是如果1、2、3三种方法同时使用时的优先级)。  即:1>2>3

session详细解析(是否过期、失效时间)

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

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

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

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

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

3.设置session的失效时间

  • a) web.xml中
<session-config> 
    <session-timeout>30</session-timeout> //单位为分钟
</session-config>
  • b) 在程序中手动设置
session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期
  • c) tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:
<Context path="/livsorder" docBase="/home/httpd/html/livsorder"  
         defaultSessionTimeOut="3600" isWARExpanded="true"  
         isWARValidated="false" isInvokerEnabled="true"          
         isWorkDirPersistent="false"/>

4.如何判断session过没过期

1) 以前是根据 if (session.getAttribute('user')==null) 判断是否为空 

2) 如下为看到的一个帖子,判断session不为空的好方法:request.getSeesion(boolean)方法,一下子让我恍然大悟。

这个方法里面传了一个boolean值,值为true时,若request中的session不存在,那么就创建新的会话,如果存在就返回当前的会话;值为false时,若request中的session不存在就返回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。       

也有很多人觉得应该使用javax.servlet.http.HttpSessionBindingListener接口来实现类似功能。       

他们的意思是当session创建的时候session.setAttribute("isActive","yes"),只要session没有过期,那么我们就可以 session.getAttribute("isActive")==null来判断,但是如果session过期以后就不能用这个办法了,因为此时我们使用session.getAttribute()方法就会抛出java.lang.IllegalStateException,这时候我们只能通过捕捉这个异常来进行判断,这会打乱我们整个程序的逻辑流程。

当然我们也可以在session过期的时候这样处理,在HttpSessionBindingListener接口的onValueUnbound()方法里面通过设置一个flag来标志session已过期,之后都使用这个flag,那么这个flag一定是要放在application里面,application是HttpServletContex类的对象,所以我们必须对这个flag加入是哪个session过期的信息,这样一来整个的过程就十分麻烦。      

关于用监听器实现我要补充一点,我的方法是站在某一个session的角度来实现的。如果说要监测多个session就应该站在application的角度来分析,这时候的最佳选择就是HttpSessionBindingListener或者HttpSessionListener。     

写这个文章的目的就是让大家在需要判断的时候(不管session是否过期都OK)用这样的一条语句来简单的实现功能,至于意义我们姑且不谈。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot自动重启的两种方法

    SpringBoot自动重启的两种方法

    我们在项目开发阶段,可能经常会修改代码,修改完后就要重启Spring Boot,本文主要介绍了SpringBoot自动重启的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • logback自定义json日志输出示例详解

    logback自定义json日志输出示例详解

    这篇文章主要为大家介绍了logback自定义json日志输出,就是通过logback日志体系以及logstash提供的json log依赖将数据以json格式记录到日志文件的例子
    2022-03-03
  • SpringBoot整合EasyExcel 3.x的完整示例

    SpringBoot整合EasyExcel 3.x的完整示例

    EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具,它能让你在不用考虑性能、内存的等因素的情况下,快速完成 Excel 的读、写等功能,这篇文章主要介绍了SpringBoot整合EasyExcel3.x的过程,需要的朋友可以参考下
    2023-07-07
  • 基于Spring Boot的Environment源码理解实现分散配置详解

    基于Spring Boot的Environment源码理解实现分散配置详解

    这篇文章主要给大家介绍了基于Spring Boot的Environment源码理解实现分散配置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • maven如何查看jar的pom引入来源

    maven如何查看jar的pom引入来源

    这篇文章主要介绍了maven查看jar的pom引入来源,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • JAVA基础之注解与反射的使用方法和场景

    JAVA基础之注解与反射的使用方法和场景

    这篇文章主要给大家介绍了关于JAVA基础之注解与反射的使用方法和场景的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • java键盘录入的方法举例详解

    java键盘录入的方法举例详解

    这篇文章主要给大家介绍了关于java键盘录入的相关资料,我们在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性,需要的朋友可以参考下
    2023-10-10
  • Springboot Thymeleaf数字对象使用方法

    Springboot Thymeleaf数字对象使用方法

    这篇文章主要介绍了Springboot Thymeleaf数字对象使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2007-09-09
  • Linux(centos7)安装jdk1.8的详细步骤

    Linux(centos7)安装jdk1.8的详细步骤

    Linux的使用相信大家都要用到java吧,在使用java前我们得先安装jdk以及配置环境变量等工作,下面这篇文章主要给大家介绍了关于Linux(centos7)安装jdk1.8的详细步骤,需要的朋友可以参考下
    2023-10-10
  • Spring中@Scope注解用法解析

    Spring中@Scope注解用法解析

    这篇文章主要介绍了Spring中@Scope注解用法解析,@Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下五种作用域,需要的朋友可以参考下
    2023-11-11

最新评论