一个判断session是否过期的小技巧

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

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

 

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

 

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

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

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

 

3.设置session的失效时间

 a)web.xml中

 

Xml代码  收藏代码
  1. <session-config>    
  2.     <session-timeout>30</session-timeout>    
  3. </session-config>   

 b)在程序中手动设置

    session.setMaxInactiveInterval(30 * 60);//设置单位为秒,设置为-1永不过期

c)tomcat也可以修改session过期时间,在server.xml中定义context时采用如下定义:

Xml代码  收藏代码
  1. <Context path="/livsorder" docBase="/home/httpd/html/livsorder"  
  2.   defaultSessionTimeOut="3600" isWARExpanded="true"  
  3.   isWARValidated="false" isInvokerEnabled="true"  
  4.   isWorkDirPersistent="false"/>  

 

4.如何判断session过没过期

request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回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,原因我想大家应该是显然的。

 

 

[java] view plain copy
 print?
  1. private boolean checkSession(   HttpServletRequest request,  
  2. HttpServletResponse response) {  
  3. HttpSession session = request.getSession(false);  
  4. String requestURI = request.getRequestURI();  
  5. String contextPath = request.getContextPath();  
  6.   
  7. requestURI = requestURI.substring(contextPath.length());  
  8.   
  9. if(requestURI.equals("/") ||  
  10. requestURI.equals("/login.jsp") ||  
  11.     requestURI.equals("/login.do")  ||  
  12.     requestURI.equals(this.errorPage))  
  13. return true;  
  14.   
  15. if(session != null   
  16. && session.getAttribute(this.objName) != null   
  17. && session.getAttribute("year") != null)  
  18. return true;  
  19. else   
  20. return false;  
  21. }  

 

 

 

 

比较好的一个办法

 

[java] view plain copy
 print?
  1. // request.getSession(false)==null可以近似的判断是否过期:如果已经过期,那么返回的是null,
  2. // 但是当第一次请求,刚刚建立一个session的时候,上述方法也返回null   
  3.  
  4. //所以应该这么做   
  5. if(null==request.getSession(false)){   
  6.    if(request.getSession(true).isNew()){   
  7.    }   
  8. else{   
  9. System.out.println("session已经过期");   
  10. }   
  11. }  
  12.  

isNew()是指是否一个新创的session,当用户访问一个支持session的jsp网页时,session被创建,尽管有时session里面并没有任何东西。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扩展方法

扩展方法是写在静态类中&#xff0c;且方法是静态方法。 不限制参数的数量。 不限制返回类型。 不限制可使用扩展方法的类型。 和普通方法编写相似&#xff0c;唯一不同的是每一个扩展方法都必须有一个固定的参数。statc void Method&#xff08; this DataType name&#xff0…

cpu执行命令方式

(一)有序处理器 早期的处理器为有序处理器&#xff08;In-order processors&#xff09;&#xff0c;有序处理器处理指令通常有以下几步&#xff1a; 指令获取如果指令的输入操作对象&#xff08;input operands&#xff09;可用&#xff08;例如已经在寄存器中了&#xff09…

jQuery基础-事件

只能添加一个处理函数&#xff0c;后面的会覆盖前面 会有兼容性差异 冒泡 会依次检查父元素 截获冒泡 或者 最大的缺陷 并且在IE和NetSpace里面分别为冒泡和捕获两种 多个处理函数 依次执行 捕获--->自己--->冒泡 true 只捕获&#xff0c;不冒泡 false 只冒泡 从父元素的…

别的AI还在打游戏,这个AI已经当上“超级马里奥”游戏策划了|GECCO最佳论文

AI打游戏已经不是什么新鲜事了&#xff0c;“沉迷”Dota 2、星际争霸、LOL的AI一个接一个的出现。 但是你也许不知道&#xff0c;相比这些“游戏玩家”AI&#xff0c;还有一位优秀的AI&#xff0c;直接当起了“游戏策划”&#xff0c;做的还是脍炙人口的“超级马里奥”。 &…

单点登录的三种实现方式

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 单点登录SSO&#xff08;Single Sign On&#xff09;说得简单点就是在一个多系统共存的环境下&#xff0c;用户在一处登录后&#xff0c;…

快速判断数组中每个对象同一属性值是否相同

做批量查询的时候&#xff0c;要确定数组中的多个对象下的字符串是否能全部匹配&#xff0c;这时需要在匹配的名称对象中通过字段记录该名称是否匹配。 const search [ { name: B, isExistence: false },{ name: C, isExistence: false } ]; 这时要确定 search 是否全部匹配上…

java对象占用内存大小?

一个不包含任何内部成员变量的空Object大约占33byte&#xff0c;若增加成员变量&#xff0c;则增加相应大小的内存占用。 测算方式&#xff1a;设置jvm的堆大小为1m&#xff0c;在堆中不停new不含任何成员变量的OOMObject对象&#xff0c;直到堆内存溢出。如下图&#xff0c;在…

Java程序员面试中的多线程问题

很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework)&#xff0c;理解核心线程概念时&#xff0c;娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题&#xff0c;这些问题经常被高级工程师所问到。 0.Java 中多线程同步是什…

SpringBoot2使用WebFlux函数式编程

本文只是简单使用SpringBoot2使用WebFlux的函数式编程简单使用&#xff0c;后续会继续写关于Webflux相关的文章。 最近一直在研究WebFlux&#xff0c;后续会陆续出一些相关的文章。 首先看一下Srping官网上的一张图&#xff0c;对比一下SpringMvc和Spring WebFlux&#xff0c;如…

单点登录原理与简单实现

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构&#xff0c;http作为通信协议。http是无状态协议&#xff0c;浏…

java接口类支持多继承

一个类只能extends一个父类&#xff0c;只能有一个父类&#xff0c;但可以implements多个接口。java通过使用接口的概念来取代C中多继承。与此同时&#xff0c;一个接口则可以同时extends多个接口&#xff0c;却不能implements任何接口。Java中的接口是支持多继承的。

xmind-HTTP协议

转载于:https://www.cnblogs.com/margot921/p/9764788.html

弹性布局

弹性布局 一、Flex布局是什么&#xff1f; Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。 二、基本概念 采用Flex布局的元素&#xff0c;称为Flex容器&#xff08;flex container&…

Java-Type简单分类

&#xff08;1&#xff09;ParameterizedType&#xff1a; 参数化类型&#xff0c;例如List<T>。 &#xff08;2&#xff09;GenericArrayType&#xff1a; 泛型数组类型&#xff0c;例如T[]。 &#xff08;3&#xff09;TypeVariable&#xff1a; 泛型的类型变量&a…

解决dataTable 报错:cannot read property “style“ of undefined

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 其实这错&#xff0c;我之前也遇到过&#xff0c;只是太久了&#xff0c;没有记录下来&#xff0c; 今天看到群里朋友也遇到这个错误&a…

万恶之源 - Python基础数据类型一

整数 整数在Python中的关键字用int来表示; 整型在计算机中运于计算和比较 在32位机器上int的范围是: -2**31&#xff5e;2**31-1&#xff0c;即-2147483648&#xff5e;2147483647 在64位机器上int的范围是: -2**63&#xff5e;2**63-1&#xff0c;即-9223372036854775808&…

谈谈对于技术面试的心得体验

导读&#xff1a;作者lzprgmr写了一篇《谈谈技术面试》文章&#xff0c;他在文中讲述了自己对于技术人员面试的经验和心得&#xff0c;以下是文章内容&#xff1a; 只要是招一个技术人员&#xff0c;不管是初级的程序员还是高级软件工程师&#xff0c;技术上的考核都必不可少。…

es6中class类的全方面理解(三)------静态方法

不需要实例化类&#xff0c;即可直接通过该类来调用的方法&#xff0c;即称之为“静态方法”。将类中的方法设为静态方法也很简单&#xff0c;在方法前加上static关键字即可。这样该方法就不会被实例继承&#xff01; class Box{static a(){return "我是Box类中的&#xf…

jackson/fastJson boolean类型问题

1.我们以Person对象举个栗子&#xff0c;person有三个属性。name&#xff0c;age和isGay Data public class Person {public Person(String name, int age, boolean isGay) {this.name name;this.age age;this.isGay isGay;}private String name;private Integer age;priva…

django模板系统(下)

主要内容&#xff1a;母版&#xff0c;继承母版&#xff0c;块&#xff0c;组件&#xff0c;静态文件 母版 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"x-ua-compatible" conten…