IIS6 下的 一些传说中的稀奇古怪的问题

IIS6 比IIS5 的应用程序池强大,操作也略微复杂了一些,不过还好,翻译的还行……能看懂

但是网上有很多类似的例子,比如说:Session丢失了一类的稀奇古怪的问题。最近在写一个ajax应用,结果也碰上了这个问题。不过具体的说,我的问题的表象不是session丢失,而是application缓存的近乎于随机的数值改变~

事情是这样的:我在application中存放了一个多维数组表示一个数据表,又放了一个表示该缓存最近一次更新的时间的字符串/日期变量。程序每次调用缓存数组的时候,都先检测一下缓存更新的时间与现在的时间差是否已经达到了需要更新的大小,如果是,则先重新访问数据库刷新缓存,然后再从缓存数组中读取数据。结果就开始搞笑了……

我看到了更新时间在刚刚刷新过缓存之后,会变成另外一个时间,有可能跟当前时间早2~3分钟,也有可能会晚2~3分钟,有时却又差不多。这还好,最可气的是刚刚做过的数据库的更新,在缓存中竟然没有被体现,但多刷新几次以后,会有一次、两次正确,时间略久一些,就没什么错了,怎么刷都能正确体现。除此之外,还有一个情况就是,用XMLHttpRequest(以下简为XHR)获取服务器端数据时,因为服务器端通过Cookies + Session 验证权限,经常导致XHR获取时出现:您无权访问资源!但有时又是可以的。起初以为是XHR传递SessionID Cookie的问题,没有跟前面的缓存的问题联系到一起考虑,否则应该不会困扰我这么久了 ……

郁闷了好久。只好放下这个事情,先集中精力搞编码的问题。周3把编码问题搞定了,程序经过昨天调试,已经基本无大错了。于是又回到这个问题上来。

1.监视session

监视session.sessionid 时发现,几次提交不在同一个sessionid 下,说明读取了不同的session !通过查看request.servervariables("HTTP_Cookie")进而发现,居然有5~6个 aspsessionid的cookie存在 -_-!!

因为已经看到了aspsessionid的cookie名称,于是想通过 response.cookies(aspsessionid的名称)=""  来清除多余session,结果报错:受保护的cookie无法修改。

后来发现sessionid不同时,application缓存中的缓存更新时间也不相同,但基本上是一一对应的~ 我汗~~从来没有碰到过这种情况……问了我们技术头,也未果。

2. 问题原因

在网上一搜,发现有很多丢失session的问题,但基本上没有像我这种有n个session的……死马当活马医吧,于是想到写缓存存取部分的时候曾经注意到 IIS 的AppPool设置里有回收工作进程这一说~默认是20分钟,被我发现以后改到了1740分钟……因为application缓存也跟session缓存似的20分钟一清空,多不爽哦

AppPool tab1 

翻到了第二个标签,偶然看到下面的最大工作进程数 = 5(默认应该是1,貌似是上次修改回收进程时间的时候改了)。ps: 空闲超时那个项目,默认是勾选的,与前面的回收工作进程的时间有一些关系。被我取消了。

看到这个,恍然大悟,一切的一切都是因为多个请求被自动平均分配到了5个进程上,5个工作进程互相独立: session 、application 变量都是独立的,完全相当于5台服务器的dns负载均衡 -_-!!

3 . 解决方案

把最大工作进程数重新设置为1,即可解决诸如:session丢失、application缓存随机重置等貌似离奇的问题。

最大工作进程数>1 的优点在于,对于服务器的请求可以自动分配到独立的进程中,单独连接数据库或者访问其他资源,一旦一个进程中发生死锁或者引起性能瓶颈的操作,其他进程依然可以独立运行,互不影响。如果要模拟多站点非粘性用户会话解决方案的话,把最大工作进程数调整为1以上是个不错的办法 -_- 这时就必须得用其他方法来维持用户会话:比如单独的登录服务器/群、第三方软件、数据库Session、使用对称加密的session id附加在url上或者放在form 的hidden input 里 等。

4. 后记

又碰到了CSDN的搞笑验证码,汗一个……

点击浏览大图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值