[英]How does an application pool recycle affect ASP Net Session State?
我知道,當應用程序池被回收時,會啟動一個新的工作進程,但我對在此過程中如何處理過期和有效會話感到困惑? 傳遞給新的工作進程線程哪些被淘汰? 它會做什么:
在回收之后,當用戶A和用戶B將要求他們的會話狀態是什么時?
如果您有一個Web服務器,並且您已使用默認的InProc
模式進行SessionState持久性,那么您在服務器代碼中添加到會話的Dictionary中的任何數據都將在應用程序池回收期間丟失 - 在回收后,當您的代碼接下來訪問SessionState
字典中的條目時,它將返回null
。
如果跨負載均衡器有多個Web服務器,會話狀態錯誤地配置為InProc
,並且用戶返回到其他服務器(即沒有粘性路由),則會發生類似情況。
(存儲在瀏覽器上的會話狀態cookie可能仍有效幾分鍾)。
允許會話狀態“存活”應用程序池回收,服務器崩潰或跨越服務器場的方式是保留存儲在SessionState
數據,以便服務器(或多個服務器)可以在用戶的時候再次檢索數據會話返回。 最簡單的方法是使用開箱即用的解決方案之一,即單獨的StateServer
進程,或在SqlServer
數據庫中存儲狀態。 自定義持久性也是一種選擇。
一個警告 - 請注意,您在“進程外”模式下存儲的任何數據(如StateServer
或SqlServer
需要可序列化 - 當您切換出InProc
時,這可能是一個重大變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.