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

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

  1. 关于web会话中的session过期时间的设置

    关于web会话中的session过期时间的设置 1.操作系统: 步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉右键“属性”——〉主目录——〉配置— ...

  2. session的工作原理、django的超时时间设置及session过期判断

    1.session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 session服务端中存在的数据为: session = { 随机字符串1:{ 用户1的相关信 ...

  3. PHP判断SESSION过期的方法

    在公共函数function.php中添加如下方法,即可控制用户登录的SESSION有效期 //封装SESSION过期判断方法function start_session($expire = 0){ $ ...

  4. session过期返回登录页面跳出frame

    session 过期返回登录页面 方法1, HttpSession session = request.getSession(); String LOGIN_ID = (String) session ...

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

    Web端开发时,用户登录后往往会通过Session来保存用户信息,Session存放在服务器,当用户长时间不操作的时候,我们会希望服务器保存的Session过期,这个时候,因为Session中的用户信 ...

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

    在Asp.net中,可以有四处设置Session的过期时间:(原文作者:望月狼地址:http://www.cnblogs.com/wangyuelang0526/) 一.全局网站(即服务器)级 IIS ...

  7. [转]菜鸟程序员之Asp.net MVC Session过期异常的处理

    本文转自:http://www.cnblogs.com/JustRun1983/p/3377652.html 小赵是刚毕业的计算机专业方面的大学生,4年的大学时间里面,他读过了很多编程方面的数据,也动 ...

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

    问题1:传统的系统界面,iframe了三个页面,上,左,右,用户点击注销的按钮在上面得top.jsp里面,方法:<a href="../adminAction/admin_logout ...

  9. session过期问题

    php中session过期时间设置及回收机制详解: 修改php中的session过期时间可以修改php配置文件php.ini中的session.gc_maxlifetime即可. 当php每发出一次请 ...

随机推荐

  1. Lodop6 以上打印控件使用,详参考自带说明文档,打印样式及文字大小要特殊设置一下

    <link href="../css/cssprint.css" rel="stylesheet" /> <script src=" ...

  2. Web前端工程师

    前端开发,不仅仅是需要会写页面而已,还需要具备很多技能,现做如下总结: 会点设计,不要求精湛,处理图片,设计个小广告是要的: 精通HTML+CSS,并能快速处理各浏览器兼容问题: 熟练掌握Javasc ...

  3. This kind of launch is configured to open the Debug perspective when it suspends.

    This kind of launch is configured to open the Debug perspective when it suspends. 因为设置了断点才会弹出这个,不需要调 ...

  4. 配置web项目时页面报错java.lang.NoClassDefFoundError: Tag

    把tomcat:common\lib 下的servlet-api.jar 和jsp-api.jar  cp到项目的web-inf 的lib包里 ,重启项目即可

  5. 手持机(Android)开发应用总结

    对于首次接触android的我,刚接到android开发的命令时,自己完全不懂任何android技术,可是由于项目的开发时间周期很短,必须强迫自己即学即用,到了最后才发现,技术其实只是工具,重要的是一 ...

  6. 用EXCEL内嵌的Visual Basic for Application 编程,通过 UGSimple USB-GPIB 控制器来驱动仪器34401A,并从34401A读取数据

    现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线. 每种GPIB控制器都有它的 函数库(dll库).各种GPIB 控制器的价钱插别很大.这里以一种价钱较便宜的USB-GPIB ...

  7. redis 事务

    概述 相信学过MySQL等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...

  8. git乱码问题解决

    etc\gitconfig文件中增加以下内容: [gui]     encoding = utf-8 [i18n]     commitencoding = gbk [svn]     pathnam ...

  9. SSM项目配置随笔

    一.自动扫描 使用Annotation自动注册Bean:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解. 1.spring配置文件(扫描注解) &l ...

  10. TJI读书笔记16-异常处理

    TJI读书笔记16-异常处理 概念 基本异常情形 异常的捕获 自定义异常 异常说明 捕获所有异常 栈轨迹 重新抛出异常 Java标准异常 使用finally 异常的限制 构造器 异常的匹配 其他乱七八 ...