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的当前会话不存在的时候就返回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.getAttribute()方法就会抛出java.lang.IllegalStateException,这时候我们就只能通过捕捉这个异常来进行判断,这就会打乱我们整个程序的逻辑流程。
当然我们也可以在session过期的时候这样处理,在HttpSessionBindingListener接口的onValueUnbound()方法里面通过设置一个flag来标志session已过期,之后盘都都使用这个flag,那么这个flag一定是要放在application里面,application是HttpServletContex类的对象,所以我们必须对这个flag加入是哪个session过期的信息,这样一来整个的过程就十分麻烦。
关于用监听器实现我要补充一点,我的方法是站在某一个session的角度来实现的。如果说要监测多个session就应该站在application的角度来分析,这时候的最佳选择就是HttpSessionBindingListener或者HttpSessionListener
写这个帖子的目的就是让大家在需要判断的时候(不管session是否过期都OK)用这样的一条语句来简单的实现功能,至于意义我们姑且不谈。

转自:http://www.educity.cn/wenda/121809.html

时间: 2024-11-05 11:34:07

Session过期、失效时间的相关文章

asp.net web.config 设置Session过期时间

在Asp.net中,可以有四处设置Session的过期时间:(原文作者:望月狼地址:http://www.cnblogs.com/wangyuelang0526/) 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期. 二.网站级 IIS-网站-具体网站(如DemoSite)-属性-Asp.net,此时有两个选项,一个是“编辑全局配置”,一个是“编辑配置

MVC session过期如何处理跳转

以前我们总是会写一个基类也叫父类来判断session是否已过期然后跳转到指定的错误页面或者登陆界面,然后让所有的页面都继承这个基类,但是当我们应用到MVC项目中时,发现该方法并不会起作用.这时我们可以这么做: 1.建一个类,如下 using System; using System.Web.Mvc; using System.Web.Routing; namespace CheckInManagerSystem.Controllers { public class CheckLogin : Ac

对Ajax请求做Session过期判断

1 // 全局Ajax设置, 用于session过期判断 2 function ajaxSetup() { 3 $.ajaxSetup({ 4 timeout : 10000, 5 beforeSend : function(xhr) { 6 //添加ajax请求标识 7 xhr.setRequestHeader("ajaxReq", "ajax"); 8 }, 9 complete : function(xhr, ts) { 10 if (xhr.statusTe

转:设置session过期时间

在Asp.net应用中,很多人会遇到Session过期设置有冲突.其中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期. 二.网站级 IIS-网站-具体网站(如DemoSite)-属性-Asp.net,此时有两个选项,一个是“编辑全局配置”,一个是“编辑配置”. 如果“编辑全局配置”,就和上个配置一样. 如果

解决session过期后登录页面嵌套在框架中的问题

只要在登录页面中加入一下脚本即可: <script language="text/javascript"> //在嵌套时,就刷新上级窗口 if(window.parent!=window){ window.parent.location.reload(true); } </script> 解决session过期后登录页面嵌套在框架中的问题,布布扣,bubuko.com

MVC 访问IFrame页面Session过期后跳转到登录页面

Web端开发时,用户登录后往往会通过Session来保存用户信息,Session存放在服务器,当用户长时间不操作的时候,我们会希望服务器保存的Session过期,这个时候,因为Session中的用户信息取不到了,就需要用户重新登录,重新保存Session. Asp.net MVC提供了过滤器,让我们可以很方便的控制访问Action时要处理的事情,针对Session过期后页面跳转,我们可以封装一下Controller的OnActionExecuting方法作为基Controller,如下: pub

关于使用struts2时子窗体页面跳转后在父窗体打开的问题以及Session过期后的页面跳转问题

问题1:传统的系统界面,iframe了三个页面,上,左,右,用户点击注销的按钮在上面得top.jsp里面,方法:<a href="../adminAction/admin_logout.action">退出系统</a>退出之后你会发现,只是刷新了top.jsp上面那个iframe,其他两个还在,如何解决? 解决办法: target="_top",就就是它.加多这个变成:<a href="../adminAction/admin

javaweb之session过期验证

session过期判断的基本思想:用户登录成功后,将用户账号信息保存在session中,然后几乎每次执行命令都要经过过滤器,过滤器检查session中是否存在账号,若不存在, 则返回登录页面,反之正常执行. 1.web.xml中添加 <filter><!-- 配置过滤器,用来检查session中是否存在用户登录账号信息 --> <filter-name>ChkSessionFilter</filter-name> <filter-class>co

转:php中实现精确设置session过期时间的方法

原文来自于:http://www.jb51.net/article/52309.htm 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!其实不是不起作用,而是因为系统默认: ? 1 2 session.gc_pr