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