【问题标题】:When is ASP.NET session state persistedASP.NET 会话状态何时保持
【发布时间】:2016-09-14 11:20:56
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

标签: asp.net session session-state stateserver


【解决方案1】:

文档说

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

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

【讨论】:

  • 谢谢,维克托。知道是否可以手动保持会话状态?或者为什么在异常情况下不调用 ReleaseRequestState?
猜你喜欢
  • 2019-10-28
  • 2011-09-05
  • 2012-08-10
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2011-06-07
  • 2010-11-02
相关资源
最近更新 更多