日期:2014-05-17  浏览次数:20489 次

IIS6的SESSION丢失问题,难度系数10
WINDOWS2003服务器,IIS6,
SESSION存在进程中<sessionState mode="InProc" timeout="300">。

首先程序没问题,因为程序在其他各台服务器上都正常。

故障现象:
服务器上的所有SESSION在同一秒钟全部被清除。

我写了测试程序,如下:

C# code

        string a="aa";
        Response.Write(DateTime.Now.ToString());
        if (Session[a] == null)
            {
                 Response.Write("Session不存在,已重建");
                Session[a] = "1";
            }
        else
            {
                Response.Write("Session正常");
            }
            Response.End();
        }



然后用ajax异步刷新页面,每秒刷一次。结果显示平均100秒左右就会输出一次 "Session不存在,已重建",
时间并不固定,有时不到1分钟,有时候比较坚挺,能达到2分左右。

用多个客户端查看,发现所有重建SESSION的时间都一致,
可以看到服务器上有什么动作在一个时间点上清除了所有SESSION,用户会话中断,必须重新登录。

而用WINDOWS“性能”工具查看站点SESSION总数时,发现每次清除SESSION的数量也并不一致,
有时达到600多个会话,但有时300多也会被全清。

服务器上没安装任何安全产品,之前因为怀疑ARP防火墙,关闭后故障依旧。
另外什么进程池设置等等等等全都检查过,也对比过其他服务器都正常。


坐等高人现身。

------解决方案--------------------
用户标识?又来推荐我的了Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
------解决方案--------------------
看楼主对问题的描述,不是新手,与其寻找session丢失的原因,不如把程序改的更加健壮一点,因为在两次请求之间 iis 重新启动应用程序并不算个意外事件