设置session有效时间的三种方式
作者:晚期键怒症患者 发布时间:2022-03-11 15:55:15
设置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)用这样的一条语句来简单的实现功能,至于意义我们姑且不谈。
来源:https://blog.csdn.net/Lwehne/article/details/128225323


猜你喜欢
- filter自定义过滤器 增加了 对验证码的校验package com.youxiong.filter;import com.y
- 目录Map的computeIfAbsent使用场景和方法常规实现使用computeIfAbsent方法实现Map中computeIfAbse
- javax.el.ELException的解决方式failed to parse the expression [${xxx}]Tomcat
- 算法中递归的一个典型应用就是遍历目标文件夹,并把该文件夹下的所有文件和文件夹打印或显示出来,还可以递归计算出目标文件夹的总大小。本文即以实例
- 不适用click而用touch自定义监听:class myOnGestureListener extends GestureDetector
- 菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(Co
- 1.面对对象的初步认识1.1什么是面向对象用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。1
- Java 判断字符串是否为IP地址,供大家参考,具体内容如下1、代码主要就是这么几个条件非空长度符合 0.0.0.0 - 255.255.2
- 前言有人说Gradle使用groovy语言编写,简单,明了没像maven使用xml臃肿,其实我倒不觉得,我觉得maven挺好的,管理jar依
- 创建文件或文件夹您可通过编程方式在您的计算机上创建文件夹、子文件夹和子文件夹中的文件,并将数据写入文件。public class Creat
- 首先备注一下JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE
- 前言作为一个新手,最近在学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站。第一次搞爬虫,涉及到了网
- 1.实例1(主要看到[2])1.1.系统功能: 开发一个计算器服务CalculateService,这个服务包含加(plus)、减(minu
- 前言在上一篇 Spring boot + LayIM + t-io 文件上传、 监听用户状态的实现 中,已经介绍了两个小细节:用户的在离线状
- 数据表格能够清晰的呈现数据信息,但是我们对于一些繁杂多变的数据想要很直观的看到数据变化走势或者数据的占比时,数据图表会更具代表性,并且在呈现
- 一、synchronized 有不足新事物的出现要不是替代老事物,要么就是对老事物的补充JUC 的 locks 就是对 synchroniz
- Spring框架基于注解开发CRUD,供大家参考,具体内容如下1. Maven坐标<!-- https://mvnrepository
- 一、结构型模式结构型模式有什么好处?从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题二、适配器模式USB网线转换器三、
- 在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进
- 同类型对象的比较三个维度去比较同一性相等性相似性样例引入想象一下这样的一个场景:小王去图书馆借了一本java核心技术卷1,如图不幸的是小王把