iis session 自动失效的问题

WINDOWS2003系统,系统装有MACFEE和360,最近这段时间,我并没有进行什么安全设置,可是当我一登陆到我的ASP网站的后台,还没有操作

到2分钟,有时候会长一点,就会提示没有登陆,登陆失效,开始以为是SESSION失效过快,就在IIS里面把SESSION的时间设置的非常长,但

是效果还是一样,BAIDU,GOOGLE了一下,没有长到相应的解决方案,难道只有重装呼,哪位仁兄如果遇到类似的情况,可以告诉小弟一下,

帮小弟分析一下原因。


解决方法:在应用程序池里面点击右键,进行以下配置。

取消进程池的最大线程回收
取消对应用进程池的内存与CPU限制
取消最大进程与空间时关闭进程即可

 

===================================================================================

也有人这么说是服务器的问题,用以下办法解决,但是没有起作用。

打开IIS—网站属性—主目录—配置—选项,选中“启用会话状态”,将“会话超时”改为3000

===================================================================================

Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟)

。当Timeout属性设置的时间值耗尽后,会话资源将被释放。通过Timeout属性破坏Session对象,避免了Session对象在服务器中无限制地产

生,保护了服务器资源。但是,在实际网络开发中,常常遇到由于Session对象失效,用户状态信息丢失而导致应用流程无法正常完成的问题


虽然利用Timeout属性释放资源的策略是出于保护服务器的目的,但是Session对象不可预知的失效性,却成为开发应用程序的一个弊病。因

而在实际应用程序的开发中,必须解决Session对象失效的问题。


传统的解决方法


现有的解决方法都是采用服务器端方法解决Session对象失效问题。典型的处理方法分为两大类:失效前的处理和失效后的处理。


失效前的处理是指在Session对象尚未失效之前,对变量进行转存等处理,做到防患于未然。典型的解决方法是在应用程序中设定一个定时器

,在Session对象失效前5分钟触发定时器,然后重新设置Session对象的各个变量和对象。由于必须在服务器端实时维护该定时器,并且必须

保证该段程序在整个会话过程中处于激活状态,所以采用这种方法增加了服务器的额外负载。


失效后的处理是指在Session对象失效后,立即提示用户进行处理。典型的解决方法是在Session对象失效后,在服务器端保存断点,并提示

用户重新登录,继续完成工作。这种方法实现简单,但是往往因为断点的不可完全自动恢复性,以及重新登录过程的复杂性,而受到最终用

户的抱怨和指责。


针对以上两类解决方案的缺陷,笔者在编程实践中结合Cookie对象的特性,采用Session对象与Cookie对象在客户端联合存取会话级变量的方

法,既避免了对服务器资源的额外需求,又解决了断点不可自动恢复的问题,而且还免去了重新登录的麻烦。


新的解决方法


Cookie对象是用来存储有关当前用户数据的小信息包,它可以在浏览器和Web服务器之间传递。在Web应用中,Cookie提供了一种用于跟踪、

记录每个用户位置的机制。Cookie最常见的用处之一,就是保存一个Web应用中最后一次被访问的网络页面的时间以及日期或被访问的网址。


通常,Cookie对象在客户端Windows系统目录下Cookies子目录中以文件形式存储。存储在Cookie对象中的信息数据能够被保存较长时间,所

以,可以将会话级变量备份在Cookie对象中,在Session对象失效后,通过检索并利用Cookie对象中的信息来自动恢复断点。


Cookie对象具有如下几个属性:


●Expires:设定Cookie对象到期的日期;


●Domain:将Cookie对象的传送确定为仅由Domain属性确定的成员;


●Path:确定Cookie对象传送路径;


●Secure:明确Cookie对象是否安全;


●HasKeys:返回Cookie对象是否包含多值。


如果没有显式定义Cookie对象的Expires属性,Cookie对象将在用户会话期结束时到期。


ASP中通过Request集合和Response集合读写对象。向Cookie对象写变量的语法如下:


Response.Cookies(cookie)[(Key)|.attribute] = value


其中,cookie是Cookie文件名,Key标明一个字典元素,attribute是Cookie 的一个具体性质,value是分给cookie的值。例如,为创建一个

叫MyHobby的Cookie,并分配其值为:BasketBall,使用下述语法:


<%Response.Cookies(“MyHobby")=“BasketBall" %>


在客户机器上读取Cookie对象的方法如下:


Request.Cookies(cookie)[(Key)|.attribute]


其中,cookie是被请求Cookie的名字,Key是子关键字值下标,attribute是用于标明Cookie属性。例如:为抽取一个叫做MyHobby的Cookie中

的信息并将它的值写到页面,使用下述语法:


<% Request.Cookies(“MyHobby") %>


需要注意的是:不能在HTTP页首信息已被送到请求浏览器之后,再向一个Cookie对象写入信息。换句话说,不能在任何HTML标识符被发送到

浏览器之后才向浏览器发送Cookie信息。具体实现


下面通过一个基于ASP技术的聊天室的实现,来介绍如何处理Session对象变量失效的问题。


●在用户登录前初始会话级变量:UserName(用于存储登录用户名)。


<% Session(“UserName")=“" %>


//初始化Cookie对象


<% Response.Cookies(“UserName")=“" %>


●在用户登录时,设置会话级变量并备份到客户端Cookie对象中。


<%userName=Trim(Request.For(“UserName"))%>


<% Session(“UserName")=userName %>


//将会话级变量备份到客户端Cookie对象中


<% Response.Cookies(“UserName")=userName %>


●在用户发言的时候,读取会话级变量,如果该变量已经失效,则通过读取Cookie对象,恢复该会话级变量的属性值。


<% userName=Session(“UserName") %>


//如果变量已经失效,则检索客户端Cookie对象


<% if userName=“" then %>


<% userName=Request.Cookies(“UserName") %>


<% if userName=“" then %>


// //如果用户未经过登录就进入聊天室,则该Cookie对象属性值为空。此时,提示用户出错,并转向用户登录页面


<% Response.Redirect “Error.html" %>


<% else %>


//从Cookie对象中恢复该会话级变量


<% Session(“UserName")=userName %>


<% end if %>


<% end if %>


●当用户退出聊天室时,清除会话级对象和Cookie对象。


<% Session(“UserName")=“" %>


//将Cookie对象属性值清除,避免用户不经过登录就直接进入聊天室


<% Response.Cookies(“UserName")=“" %>


以上代码在Windows NT 4.0+IIS 4.0+IE 5.0环境中运行通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值