ASP.NET会话状态何时保持

ASP.NET会话状态何时保持,asp.net,session,session-state,stateserver,Asp.net,Session,Session State,Stateserver,当我在会话中存储了一个值,并且之后发生了一些异常时,会话状态可能不会被持久化 Session["MyKey"] = value; throw new Exception("Test exception"); 我发现,如果我使用InProc模式,该值会立即持久化,因此如果发生异常,它会被存储 但是如果我切换到StateServer模式,如果发生异常,该值将不会持久化。我可以写入会话,从会话中再次读取,但在异常发生后,我在该请求中对会话状态所做的所有更改都将被丢弃(即,不会持久化)。将来的任何请求

当我在会话中存储了一个值,并且之后发生了一些异常时,会话状态可能不会被持久化

Session["MyKey"] = value;
throw new Exception("Test exception");
我发现,如果我使用
InProc
模式,该值会立即持久化,因此如果发生异常,它会被存储

但是如果我切换到
StateServer
模式,如果发生异常,该值将不会持久化。我可以写入会话,从会话中再次读取,但在异常发生后,我在该请求中对会话状态所做的所有更改都将被丢弃(即,不会持久化)。将来的任何请求都将读取会话的“旧”状态

起初,我认为这与异常情况下未发送响应的会话cookie有关,但这种行为发生在已经存在且用户已经持有其标识符的会话中。它也明显不同于
InProc
StateServer
,虽然这两种方法处理cookie的方式相同,但不同的只是持久层

会话状态持久性是如何工作的在请求生命周期的哪一点上,更改实际持久化到了
StateServer
是否可以强制持久化会话状态,以便即使在异常发生后也能持久化?

文档中说

HttpApplication.ReleaseRequestState事件。在ASP.NET完成执行所有请求事件处理程序后发生此事件导致状态模块保存当前状态数据。

医生说

HttpApplication.ReleaseRequestState事件。在ASP.NET完成执行所有请求事件处理程序后发生此事件导致状态模块保存当前状态数据。


可以是重复的(或非常接近的)可以是重复的(或非常接近的)谢谢,Wiktor。是否可以手动保持会话状态?或者为什么在异常情况下不调用ReleaseRequestState?谢谢,Wiktor。是否可以手动保持会话状态?或者为什么在异常情况下不调用ReleaseRequestState?