Ayanmw \'s CU bloga52527459.blog.chinaunix.net
a52527459
全部博文(117)
苹果MacOS麦金塔(2)
浏览器(1)
数据库(3)
SQL(1)
asp(7)
Asp.Net(2)
IIS(4)
Javascript(5)
日记(1)
Fedora(0)
Ubuntu(3)
tarbar软件包(0)
vi(1)
yum和rpm(2)
apt和dpkg(1)
Shell(4)
apache(2)
Cocoa NS类的学习(2)
2013年(1)
2012年(2)
2011年(18)
2010年(95)
2009年(1)
clifford
soofun
shanggua
fj8172
大鬼不动
kevinsea
yjx2003
小雅贝贝
jonelaw
wb123456
宁宁宁宁
hero
格伯纳
onano
xflltw
fugang
不休蝙蝠
xiuda555
分类: 系统运维
2010-07-29 12:37:15
保持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="/blog/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="/blog/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里却只有管理员可以设,两者的权限不同,所以设置的范围就不同了。
上一篇:iis session 自动失效的问题
下一篇:ASP 显示小数点前的0
登录 注册