采用虚拟主机的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 WindowsCurrentVersionInt
3. restart computer.
解决asp脚本运行超时的处理方法
脚本超时和这里的SESSION超时不是同一个问题, 不过顺便一起列出。
IIS默认的脚本超时时间是90秒。上传软件或者传送数据大于90秒的时候就会产生进程脚本超时放弃执行,保护服务器的处理大容量数据内存以及CPU占用,过大导致死机或者不稳定的情况。处理办法是:
1、在IIS所在网站的属性里点击 - 主目录 - 然后配置 - 选项 - 里ASP/CGI脚本超时,大小设置高一些。
2、直接在程序的头部加入
Server.ScriptTimeOut = 500
\’500是设置的脚本超时的时间,秒为单位,具体大小自己调整。
结论:
根据以上分析, 目前只有前面2点不能确定, 那就是在线人数和病毒, 待查证以后确定。
(责任编辑:ken)