asp.net 默認的 session state 模式是 in proc(進程內),數據是在網站的應用程序池裏面保存的。這樣在 web.config 設置的超時時間,是在應用程序池沒有發生回收的基礎上纔是有效的。web
這樣就出現了問題,爲何應用程序池會發生回收?如何禁止應用程序池的回收,讓 session 的數據能夠保存得時間長一點呢?windows
1、應用程序池設置服務器
這和 IIS 應用程序池的兩個設置有關:session
【回收】裏面的【固定時間間隔(分鐘)】和【進程模型】裏面的【閒置超時(分鐘)】,這兩項的默認設置大概是二十或三十分鐘的樣子。也就是說,在應用程序池的運行時間達到設置的間隔,應用程序池會發生回收,session 會被清空;在網站空閒,即沒有請求的時間達到設置值,應用程序池會發生回收,session 會被清空。併發
這種回收的行爲在一個正式運營的網站上面,是很不合適的。我以爲 IIS 的默認值是這樣也有點奇怪,由於默認值應該是一個最通用,適合最多人的一種設置,這兩項的默認值顯然不是。可能 windows 畢竟是最流行的桌面系統,考慮到回收能夠節省資源,不影響其餘的工做任務,才這樣設置的吧。服務器通常都是單一的工做任務,不進行回收帶來的價值,明顯是高於所消耗的資源的。asp.net
因此,如上面的截圖所示,我建議把這兩項都設置爲 0,禁用這兩種回收行爲性能
2、網站屬性 高級設置網站
iis性能指標的各類概念:鏈接數、併發鏈接數、最大併發工做線程數、應用程序池的隊列長度、應用程序池的最大工做進程數詳解,感興趣的同窗參考下。.net
通常購買過虛擬主機的朋友都熟悉購買時,會限制IIS鏈接數,這邊先從普通不懂代碼用戶角度理解IIS鏈接數線程
顧名思義即爲IIS服務器能夠同時容納客戶請求的最高鏈接數,準確的說應該叫「IIS限制鏈接數」
3、網站 會話狀態