【发布时间】:2016-09-14 11:20:56
【问题描述】:
当我在会话中存储一个值并且之后发生一些异常时,会话状态可能不会被持久化。
Session["MyKey"] = value;
throw new Exception("Test exception");
我发现如果我使用InProc 模式,该值会立即持久化,因此如果发生异常,无论如何都会存储它。
但是如果我切换到StateServer 模式,如果发生异常,该值将不会被持久化。我可以写入会话,从会话中再次读取它,但是在发生异常后,就像我在该请求中对会话状态所做的所有更改都将被丢弃(即不持久)。并且任何未来的请求都将读取会话的“旧”状态。
起初我认为这与在发生异常时未发送会话 cookie 有关,但这种行为发生在已经存在且用户已经持有其标识符的会话中。它也明显不同于InProc 和StateServer,虽然这两种方法处理cookie 的方式相同,只是持久层不同。
会话状态持久性如何工作? 在请求生命周期的哪个时间点,更改实际上持久化到StateServer? 是否可以强制持久化会话状态,以便即使在发生异常后也会持久化?
【问题讨论】:
-
可能与stackoverflow.com/questions/9985499/…重复(或非常接近)
标签: asp.net session session-state stateserver