教学之友,学习之友。

站长教学网

ASP在windows2003采用iis丢失session的原因和处理方法

时间:2014-03-07 14:00来源:未知 作者:ken 点击:

采用虚拟主机的ASP网站在发布信息时遇到问题,设置session timeout = 60,可是在几分钟,甚至几秒钟后,session就失效了, 提示超时退出。

设置为session timeout=600也会出现同样的问题。

但是在星期六,在什么也没有改变的情况下,同样程序,运行基本正常,只有偶尔超时退出。在本机测试同样没有问题,本机IIS设置900秒,当然这个站点只有我自己在访问,不象已经发布的网站,有不同的人在同时访问。

有网友说,如果服务器上iis设置的时间过短。好像session.timeout放在哪里设置的时间都不管用。该网友在自己的服务器上试过!

左右框架结构,左边菜单,右边内容,没有任何清空session的语句。

所以基本可以确定2点, 1、服务器IIS时间设置基本没有问题, 2、程序没有问题。那么问题到底在什么地方?

其实很多ASP开发者都会遇到这样的情况:在会话期间(session)无故丢失session。丢失了SessionID,同样session级的变量也会丢失。

很多session丢失的原因是因为错误的程序或者是错误的虚拟目录结构。SessionID 的改变有下面几个原因。

session丢失原因一

虚拟主机在线人数超过限制,导致前面的访问者被强制退出。 访问静态页面表现为无法连接, 访问ASP等动态页面,表现为会话期间(session) 丢失,导致超时退出。解决办法只有扩大在线人数。

session丢失原因二

网站或空间被病毒或木马攻入, 修改或改变session, (session)丢失,导致超时退出。

session丢失原因三

Netscape的浏览器会认为"/App/user.asp"跟"/app/user.asp"是两个不同的程序。它会自动地开始一个新的会话期(new session)。所以,在你的网站上一定要统一字母的大小写。

session丢失原因四

另外一个是原因是 Session.Timeout 的值。

Timeout这个属性是用来设置Session的超时时间的,一分钟为单位。假如一个用户,在一个Timeout的时间内没有刷新或者请求页面,那么会话就会结束(the se ssion ends)。当你再次请求页面的时候,一个新的会话有会开始。

格式: Session.Timeout [ = nMinutes]

session丢失原因五

假如用户把浏览器的cookie关了,当然session就不能保持。因为session的保持是要靠cookie的。

要保持Session的状态,浏览器就必须支持cookie,而且在打开的状态。当然也可以用其他的方法

session丢失原因六

常犯的错误就是,建立了错误的目录结构。像下面的目录结构:

root 放了global.asa

\virtual_root 没有global.asa

\another_virtual_root 没有global.asa

调用两个virtual roots的页面,就会执行相同的global.asa(root上的那个)

另外的一个目录结构:

root 没有global.asa

\virtual 放了global.asa

\another_virtual_root 另外一个global.asa

每一个不同目录下的global.asa都会各自执行,当然执行的代码就不同了。不过如果里面的代码一样,就令当别说。:)

所以你在请求不同目录下页面,将会导致不同的global.asa被执行。不同的变量被调用,不同的session id被建立....之前的有用的信息都被破坏了。

session丢失原因七

有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。

session丢失原因八

服务器内存不足产生session丢失。

session.timeout 设置

session.timeout可以在网页的最开头设置,或者在创建session变量页面的最开头设置。 

<%
session.timeout=20
%>

影响服务器产生超时的因素

1. Server.ScriptTimeout,
2. Connection对象的CommandTimeOut属性,
3. Command对象的CommandTimeOut属性,
4. IE浏览器的设置.

Server.ScriptTimeout,默认值是90秒。要增大它,在asp文件中加一句,如下:
Server.ScriptTimeout=900,将页面超时设为900秒。

只设置Server.ScriptTimeout,无论它的值设成多大,仍会出现timeout错误。

Connection对象和Command对象有个CommandTimeOut属性,默认是30秒,如果有一个耗时的查询或数据处理,很容易就超时了。要增大它,创建对象后,设置它的属性,如下:

con.CommandTimeOut = 900,站长教学网 eduyo.com
设为900秒,其中con是一Connection对象。如设为零,将无限等待,没有这一timeout限制。

Command对象不会继承Connection的这一属性,所以对可能超时的Command也要单独设置CommandTimeout属性。

最后IE也有个超时设置,5分钟从服务器得不到数据,也超时。

解决方法:(原文请参照微软KB中的Q181050)
1. IE要4.01 sp1以上版本.
2. 在注册表中HKEY_CURRENT_USERSoftwareMicrosoft WindowsCurrentVersionInternet Settings 中加一DWORD类型ReceiveTimeout,值设为比如8个9。
3. restart computer. 

解决asp脚本运行超时的处理方法

脚本超时和这里的SESSION超时不是同一个问题, 不过顺便一起列出。

IIS默认的脚本超时时间是90秒。上传软件或者传送数据大于90秒的时候就会产生进程脚本超时放弃执行,保护服务器的处理大容量数据内存以及CPU占用,过大导致死机或者不稳定的情况。处理办法是:

1、在IIS所在网站的属性里点击 - 主目录 - 然后配置 - 选项 - 里ASP/CGI脚本超时,大小设置高一些。

2、直接在程序的头部加入
Server.ScriptTimeOut = 500
\’500是设置的脚本超时的时间,秒为单位,具体大小自己调整。

结论:

根据以上分析, 目前只有前面2点不能确定, 那就是在线人数和病毒, 待查证以后确定。

(责任编辑:ken)
TAG标签: windows asp Session
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容