`
yunhuisdu19811011
  • 浏览: 94738 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论
  • fightingIOW: 案例看了,能实现上传,但是不是异步的,怎么改成页面可以预览呢? ...
    swfUpload实例
  • kizz: 您好,实例我看了,确实不错。您有struts2版的吗?现在项目 ...
    swfUpload实例

解决session过期问题

    博客分类:
  • java
阅读更多

  先说明情况:公司做监控系统,B/S结构,主要用在局域网内部!监控系统开机可能要开好长时间,管理员的ID和权限等是写在Session里的——我想不用Cookies的原因可能是Cookies不是很安全,还有就是局域网内,只是几台机子访问服务器,Session没有几个,所以即使总保持着Session也不会太占用资源,最起码服务器能承受的起。

      保持Session的方法:有人说设session.timeout=-1,或小于0的数。这种方法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。又有人说设session.timeout=99999。这种同样不行,session有最大时间限制。我经过测试发现最大值为24小时,也就是说你最大可以session.timeout=1440,1441都是不可以有,呵呵。本人测试环境:win2003+IIS6.0+ASP3.0。

     所以想通过设session.timeout的过期时间让session永不过期是不可能的。写到Cookies里是比较好的方法,网上也有很多这样的教程,这里就不再说了!还有就是用在要保持session的页里设隐藏iframe每隔一段时间(这个时间小于session.timeout的时间)把涮新一次frame里的空页面!实现方法如下:

      在要保持session页里加上:

<iframe width=0 height=0 src="SessionKeeper.asp">
</iframe>

      同目录下建一下SessionKeeper.asp的文件。

<html>
<head>
  <meta http-equiv="Refresh" content="900000;url=sessionKeeper.asp"> 
  <!--每隔900秒刷新一下自己,为了和服务器通讯一下,保持session不会丢-->
</head>
</html>


      这种方法还是比较长见的,另外还有一种和上面类似的方法,不过他不是用meta自动涮新嵌套的iframe的方法。他是用javascript:window.setTimeout("functionname()",10000);第隔一段时间时间自动调用一个函数的方法,当然函数里还是要去连接一个空的文件。具体方法如下:

      在要保持session面里加上:

<script  id=Back  language=javascript></script>

<script language=javascript>
 function keepsession(){
  document.all["Back"].src="SessionKeeper.asp?RandStr="+Math.random();
  //这里的RandStr=Math.random只是为了让每次back.src的值不同,防止同一地址刷新无效的情况
  window.setTimeout("keepsession()",900000);  //每隔900秒调用一下本身
  }
 keepsession();
</script>


      这样同一目录下建一个空内容的sessionKeeper.asp就文件就可以了!

     问题没有解决:通过以上的方法Session保持应该没有问题了,IIS默认无请求的清除session的值为20分钟,我设的每次交互服务的时间都远远小于这个值,可是我大概过个一天多的时间,session还是无缘无故的没了!郁闷。

      后来在网上多方查找终于找到答案:原来IIS为了保护服务器,有一个“回收”的概念!测试了半天终于有了点大体了解(不要笑我菜^-^)。先来看看这个“回收”在哪设置。

      启动IIS管理器->应用程序池->右键->属性->回收选项卡,有一项是默认就起作用的,就是第一项:“回收工作进程(分钟)”默认值1740分钟,大约29个小时。他是什么意思呢?我个人理解:在session.timeout之后再过1740分钟自动把所有仍在保持的session清除。这个值最大可设为4000000,大概是2700多天!我直接取消了,不用他自动回收!问题终于解决。

      另外这个属性对话框中还有其它几项:第二项应该是连接的用户超过了一定数目回收。第三项是到某一个时间就自动回收。在“性能”选项卡中“在空闲此时间段后关闭工作进程”,这里就是设置IIS默认session.timeout时间的地方了。默认值20分钟,这里同样最大值可设为4000000,和在ASP页中设置session.timeout最大值为1440不同。在这里设置超过大于1440的值是否起作用,我没作测试,我想应该是可以的。那为什么在ASP页中session.timeout的值最大只能是1440在IIS的属性中却能设的那么大呢?应该是属于一种保护机制:ASP页的session.timeout的值哪个用户都可以设,IIS里却只有管理员可以设,两者的权限不同,所以设置的范围就不同了。

<sessionState cookieless="false" timeout="480" mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" />

 

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    phpcms web发布session过期问题解决

    `TestFX168Parser.java`、`FX168Parser.java`、`ParserUtil.java`、`ParserLinks.java`可能涉及到数据解析,它们可能与phpcms的数据获取和处理有关,但直接解决session过期问题的可能性较小。 总的来说,解决phpcms...

    session过期问题

    **Session过期问题的常见场景及解决方案** 1. **用户长时间未操作**:设置合理的Session超时时间,同时考虑采用心跳检测来保持用户在线状态。 2. **用户浏览器关闭**:浏览器关闭后Session丢失,再次打开时应判断...

    ajax session过期问题的几个解决方案

    本文将针对AJAX在Session过期问题上提供几个解决方案,并对每个方案的优缺点进行讨论。 方案1:通过检查AJAX返回内容是否包含标签 当Session过期时,服务器通常会返回登录页面的HTML代码。因此,我们可以通过AJAX...

    解决session不同问题所需jar包

    这种方式减少了服务器的存储压力,但需要处理Token的安全和过期问题。 针对上述描述中的"jar包",可能是一个实现了Session复制或集中存储功能的库,比如`Tomcat8`本身支持的`manager`模块,或者其他第三方解决方案...

    Extjs 4.1 (MVC) 如何动态加载控制层以及session 过期该如何处理

    处理Session过期的问题是一个常见的挑战,尤其是当使用动态加载的控制器时。当Session过期后,由于控制器无法正常初始化,可能导致某些功能无法正常工作。这个问题的解决方案通常涉及到前后端的配合。 在后端处理...

    网页session的一些常见问题并解决方案

    在ASP.NET中,Session默认会在20分钟后过期。如果用户长时间无操作,再次提交请求时,可能会丢失Session中的数据。解决方法包括调整`&lt;sessionState&gt;`元素在Web.config中的timeout属性,以延长或缩短Session有效期;...

    完美解决ajax访问遇到Session失效的问题

    现在Ajax在Web项目中应用广泛,几乎可以说无处不在,这就带来另外一个问题:当Ajax请求遇到Session超时,应该怎么办? 显而易见,传统的页面跳转在此已经不适用,因为Ajax请求是XMLHTTPRequest对象发起的而不

    界面 ext 4.1 mvc框架 动态加载控制层 后台session 过期处理

    在EXTJS中,你可能遇到的问题是,session过期后,某些功能可能不再正常工作,尤其是对于那些在session过期前未被触发的功能。 为了解决这个问题,后端需要做以下判断: 1. 检查请求头中的`accept`字段,通常Ajax...

    针对分布式或集群session同步问题,改用jwt的续期解决方案.docx

    ### 针对分布式或集群Session同步问题:JWT续期解决方案 #### 一、背景介绍 随着前后端分离架构的普及和技术的发展,越来越多的应用选择使用轻量级的身份验证方法来确保数据安全。其中,JSON Web Token (JWT) 成为...

    集群环境下memcache解决session共享

    本篇将深入探讨如何在Tomcat8的集群环境中使用memcache来解决session共享的问题。 首先,让我们理解什么是session。Session是Web应用程序用来跟踪用户状态的一种机制,它存储在服务器端,通常包含了用户的登录信息...

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

    需要注意的是,通过拦截器监听session过期的方法主要依赖于将session对象存储到application中,这可能会带来额外的内存开销,特别是在大型应用中,可能需要更加细致的处理策略。此外,如果使用了集群部署,那么...

    验证码的session问题

    此外,也可以参考CSDN论坛上的讨论(http://bbs.csdn.net/topics/391829648),获取更多关于解决Session和验证码问题的经验和建议。学习和掌握这些问题的解决方案,对于提升Web应用的安全性和用户体验至关重要。

    关于session丢失问题

    总之,理解并解决Session丢失问题对于提供稳定、流畅的用户体验至关重要。开发人员应深入理解Session的工作原理,根据实际需求选择合适的Session管理策略,并时刻关注可能出现的问题,以便及时调整和优化。同时,...

    在ASP.NET中,设置Session的过期时间的方法

    可以使用粘性会话或配置共享Session存储来解决这个问题。 6. **性能考虑**:过多的Session数据会消耗服务器资源,应尽量减少对Session的依赖,或优化Session的使用,例如只存储必要的数据,及时清理不再使用的...

    asp保持SESSION变量不过期

    要解决“asp的session变量过一段时间就会过期”的问题,我们可以采取以下几种策略来保持Session变量不过期: 1. **修改Session超时时间**:在ASP的Global.asa文件中,可以设置Session对象的Timeout属性,来延长...

    “session已关闭”——解决方案

    这个问题可能是由于多种原因引起的,包括但不限于:服务器配置问题、session过期、session存储机制故障或者是代码逻辑错误。下面我们将深入探讨这个主题,并提供可能的解决方案。 首先,我们要理解什么是session。...

Global site tag (gtag.js) - Google Analytics