0

我的朋友在这里问了一个问题

而回答他的人——写了一些有趣的东西!(没有任何证据,来源)。

当您使用进程外会话状态存储时,它会产生更大的差异。在这种情况下,如果没有接口,系统仍然会将会话数据存储在远程数据库中,即使它没有更改(系统不会跟踪会话数据是否在请求期间被修改)。当您使用 IReadOnlySessionState 接口时,将跳过回写阶段。

它在哪里说 IRequiresSessionState 将写回会话(即使已经更改。)?

任何解释都将被排除在外。

4

1 回答 1

2

找不到有关此效果的正式文档,但启动 dotPeek (或其他一些反汇编程序)并System.Web依次环顾四周表明:

  • 何时HttpContext.Handlerset,如果处理程序实现IRequiresSessionStateHttpContext._requiresSessionStateFromHandler则设置true
  • 后一个私人成员通知getter HttpContext.RequiresSessionState
  • SessionStateModule(我猜测它总是在模块管道中),在它的EndRequest处理程序中,检查HttpContext.RequiresSessionState,如果是true,则与会话状态提供者对话以保存状态。
于 2012-03-09T16:54:31.940 回答