首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

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

2012-11-05 
JSP容器下session失效的几种情况及应对JSP容器下session失效的几种情况及应对昨天同事说起一个OA的项目,总

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

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));};
?

热点排行