ASP.NET会话状态何时保持

时间:2016-09-14 11:20:57

标签: asp.net session session-state stateserver

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

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

我发现如果我使用InProc模式,则值会立即保留,因此如果发生异常,无论如何都会存储它。

但是如果我切换到StateServer模式,如果发生异常,该值将不会持久存在。我可以写入会话,从会话中再次读取它,但是在发生异常之后,就像我对该请求中的会话状态所做的所有更改都将被丢弃(即不会被保留)。任何未来的请求都会读取" old"会议状况。

起初我认为它与会话cookie的相关性在异常的情况下没有被发送,但是对于已经存在且用户已经拥有其标识符的会话会发生这种情况。它也明显不同于InProcStateServer,而这两种方法都以相同的方式处理cookie,它只是不同的持久层。

会话状态如何持续有效? 请求生命周期中的哪一点实际上持续存在StateServer是否可以强制持久化会话状态,因此即使发生异常也会持久存在?

1 个答案:

答案 0 :(得分:0)

文档说

https://msdn.microsoft.com/en-us/library/system.web.httpapplication.releaserequeststate.aspx

  

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