Session 是 ASP.NET 狀態管理核心,但實務中常遇到遺失、超時、模式選擇等棘手問題。本文彙整最常見問題與官方解決方案。
A: 可能與防火牆、防毒軟體攔截有關。嘗試關閉防火牆測試,或檢查網路設備是否封鎖 Cookie 傳輸。
A: 兩個必要條件:
A: 主因是 應用程式集區回收。InProc Session 儲存於 aspnet_wp/w3wp 進程記憶體,進程回收導致 Session 消失。可透過事件檢視器確認回收記錄。
參考 KB:Session variables are lost intermittently
A: SessionID 儲存於客戶端瀏覽器執行個體 (Cookie)。伺服器重建 Session 時仍使用瀏覽器傳來的 SessionID,故 ID 不變。
A: 程式碼從未向 Session 寫入任何資料。Session 僅在首次寫入時建立並固定 ID。
A: 可行但複雜。微軟官方方案:Migrating ASP Applications to ASP.NET
A: 取決於模式:
A: Session_End 由伺服器內部計時器觸發,無關聯的 HttpRequest 物件,故無 HTTP 回應語境。
A: 不能。此事件無關聯請求,無請求基礎語境。
A: 呼叫端需保存/儲存 Cookie (參考 HttpWebClientProtocol.CookieContainer)。若透過 Proxy 存取,受框架限制無法共享 Session。