`

JSP容器下session失效的几种情况及应对

    博客分类:
  • java
阅读更多

JSP容器下session失效的几种情况及应对
昨天同事说起一个OA的项目,总是出现session失效的情况,我总结了曾经遇到的几种情况供他参考:

1. 浏览器长时间没有请求到后台,超过了web.xml中 <session-timeout>规定的时间。
 应对:这种情况是应用意料之中的,后台检查到session失效之后,引导用户到登陆界面。

 2.cookie超出限制,导致jsessionId丢失,进而导致session失效
  在浏览器默认设置下,session机制是以保存在cookie中的jsessionId,将无状态的http变通成了有状态的连接
  但是多数浏览器的cookie实现对cookie个数及长度进行了限制,参考以下文章
  http://www.nczonline.net/blog/2008/05/17/browser-cookie-restrictions/
  当cookie超出限制, jsessionId作为一个普通的cookie被“挤”出去了,以jsessionId为接头暗号的session也就失效了。
  利用cookie在前台保存大量数据是不明智的,代替的方法是可以使用js作为数据载体,当然js需要解决如何在页面之间共享的问题。
  在我实施的项目中遇到的具体实例是:
  使用Ext提供的利用cookie保存布局定制,即:Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
  Ext对界面定制打包存储到cookie中,通过firebug观察,一次对grid的拖拽,就会增加一个名为 ys-ext-comp-XXX的大小为2k左右的cookie
  oh my god! 使用Ext的朋友一定小心了!

  3.apache重定向到tomcat导致session失效
    这种情况可能只有少数人遇到过,我就是其中一个。具体是在开发一个CMS时,利用到apache的反向缓存机制(参见车东先生文章)
    将遭遇404错误的http请求转发给tomcat进行处理。
    由于网站后台的内容采编人员一边在jsp容器下录入内容,一边利用反向缓存机制进行页面预览。
    结果发现,只要进行一次预览,session就失效了。
    跟踪整个过程发现,结果apache重定向后,没有向tomcat转发jsessionId这个cookie。

    我的解决办法: 将jsessionId从默认的内存cookie读出,写入磁盘cookie,Cookies.setAge('JSESSIONID',1);
附对cookie操作相关函数如下:

var Cookies = {};
Cookies.setAge = function(name,days){
    var jck= Cookies.get(name);
    var exp  = new Date(); 
    exp.setTime(exp.getTime() + days*24*60*60*1000);  
    Cookies.set(name,jck,exp);
};
Cookies.set = function(name, value){
     var argv = arguments;
     var argc = arguments.length;
     var expires = (argc > 2) ? argv[2] : null;
     var path = (argc > 3) ? argv[3] : '/';
     var domain = (argc > 4) ? argv[4] : null;
     var secure = (argc > 5) ? argv[5] : false;
     document.cookie = name + "=" + escape (value) +
       ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
       ((path == null) ? "" : ("; path=" + path)) +
       ((domain == null) ? "" : ("; domain=" + domain)) +
       ((secure == true) ? "; secure" : "");
};

Cookies.get = function(name){
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	var j = 0;
	while(i < clen){
		j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return Cookies.getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if(i == 0)
			break;
	}
	return null;
};

Cookies.clear = function(name) {
  if(Cookies.get(name)){
    document.cookie = name + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
};

Cookies.getCookieVal = function(offset){
   var endstr = document.cookie.indexOf(";", offset);
   if(endstr == -1){
       endstr = document.cookie.length;
   }
   return unescape(document.cookie.substring(offset, endstr));
};

 

分享到:
评论

相关推荐

    web项目集群时共享session方案实践

    本实践将探讨几种在Web项目集群中实现Session共享的策略。 1. **基于数据库的Session共享** - Session信息可以持久化到数据库中,每当用户操作导致Session变化时,更新数据库记录。 - 优点:数据可靠,不会因...

    【北大青鸟内部教程】jsp中关于Hibernate延时加载的问题

    2. **懒加载失效**:在JSP页面上直接访问延时加载的属性可能导致懒加载失效,因为JSP执行在Web容器的上下文中,而这个上下文可能在Session关闭后。为解决此问题,可以在Controller层或Service层提前加载关联数据,...

    SpringMVC拦截器实现监听session是否过期详解

    例如,session是如何在HTTP协议中实现的、session过期后如何清除、如何在不同容器中管理session等,这些内容对于理解和实现session监听机制也是十分关键的。总之,通过SpringMVC拦截器来实现对session是否过期的监听...

    Core-Servlets-and-JSP

    5. **会话管理**:了解如何在Servlet和JSP中创建和管理session,以及如何设置session属性和失效时间。 6. **转发和重定向**:理解请求转发(request.getRequestDispatcher())和重定向(response.sendRedirect())...

    jsp九个内置对象 六个基本动作 三个指令元素

    ### JSP九个内置对象 六个基本动作 三个指令元素 #### 四种属性范围 ...以上就是JSP中四个作用域、九个内置对象、六个基本动作及三个指令元素的基本介绍,希望能帮助您更好地理解和使用JSP技术。

    JSP 中Spring Bean 的作用域详解

    Spring Bean的作用域有以下几种: 1. Singleton(单例) 单例是Spring容器默认的作用域,意味着每个Spring IOC(控制反转)容器中只有一个Bean实例。无论需要多少次获取Bean,都是返回同一个实例。这种方式使得Bean...

    j2ee学习要掌握的知识

    学习J2EE,你需要掌握以下几个核心知识点: 1. JSP(JavaServer Pages):JSP是Java Web开发中的视图层技术,用于创建动态网页。JSP文件由模板数据(HTML、CSS、JavaScript等)和JSP元素(指令、脚本、动作)组成。...

    Chamados:java web jsp和servlet课程

    6. **会话管理**:理解session的概念,如何在JSP和Servlet中创建、读取、更新和删除session数据,以及如何处理会话过期和失效。 7. **过滤器(Filter)和监听器(Listener)**:学习如何使用这些组件增强应用程序的...

    tomcat6.0.39源代码

    `org.apache.catalina.session`包下的源码解释了如何创建、跟踪和失效会话。 6. **安全性**:Tomcat的安全性涉及到角色、权限和认证机制。`Realm`接口和它的实现类如`MemoryRealm`、`UserDatabaseRealm`等,定义了...

    java面试题

    77.5. 设置session失效的时间 89 77.6. 设置MIME响应类型 89 77.7. 设置tomcat的默认访问页面 89 77.8. 设置tomcat管理用户 89 77.9. 附录 90 78. websphere 90 79. 常见异常 90 79.1. nullpointerexception 90 79.2...

    SCWCD资料 scwcd认证

    3. **会话管理**:学习如何创建和管理用户会话,如使用session对象,以及处理会话过期和失效。 4. **请求调度**:了解Servlet映射和URL路径匹配,以及使用DispatcherServlet进行请求分发。 5. **过滤器和监听器**:...

    java面试知识

    ##### 解析XML文件的几种技术 - **DOM (Document Object Model)**:将XML文档转化为树形结构。 - **SAX (Simple API for XML)**:基于事件驱动模型。 - **StAX (Streaming API for XML)**:支持流式处理大型XML文档...

Global site tag (gtag.js) - Google Analytics