在Windows2003的服務器中的IIS6加入了應用程序池來回收一些無用的進程的功能,當由于網站程序的錯誤或訪問量太多的導致的應用程序池會自動回收該進程,防止網站進入“死機”狀態,而這時候的應用程序池的回收就會導致session變量被清除,就出現了session變量不見的現象。
解決這個問題有二個辦法 :
第一:聯系我司客服將進程池的內程回收限額增大,可有效解決這個問題。但如果無限增大,可能造成內存不足而導致網站訪問速度下降,所以只能適當調整;
第二:自己修改web.config來解決
為了解決這種在Windows2003下才出現的問題,我們在服務端起動ASP.NET State Service服務,并且在系統的machine.config做了一些改動。現在默認的情況下會話狀態mode是StateServer。如果您的網站根目錄下也配有一個web.config配置文件,請把mode="InProc"改成mode="StateServer",如下代碼,就可以防止session變量的丟失:
即:
<sessionState mode="InProc" cookieless="false" timeout="60"/>改為
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>