2016-09-14 26 views
1

當我在會話中存儲一個值並且之後發生一些異常時,會話狀態可能不會持久。什麼時候ASP.NET會話狀態持續

Session["MyKey"] = value; 
throw new Exception("Test exception"); 

我發現,如果我使用InProc模式,價值被立即繼續存在,因此如果出現異常,它反正存儲。

但是,如果我切換到StateServer模式,如果發生異常,值不會持續。我可以寫入會話,再次從會話中讀取它,但是在發生異常之後,就像我在該請求中對會話狀態所做的所有更改都將被丟棄(即未保留)。任何未來的請求都會讀取會話的「舊」狀態。

起初,我認爲它與會話cookie在發生異常時不作爲響應發送有關,但是對於已經存在且用戶已經擁有其標識符的會話會發生此行爲。它也明顯不同於InProcStateServer,而這兩種方法都以相同的方式處理cookie,只是持久層是不同的。

會話狀態持久性如何工作? 請求生命週期中的哪一點實際上持續到StateServer是否有可能強制保持會話狀態,所以即使在發生異常之後它仍然會持續存在?

+0

可能是重複的(或非常接近),以http://stackoverflow.com/questions/9985499/how-does-sql-server-session-state-persistence-work –

回答