我的朋友在这里问了一个问题
而回答他的人——写了一些有趣的东西!(没有任何证据,来源)。
当您使用进程外会话状态存储时,它会产生更大的差异。在这种情况下,如果没有接口,系统仍然会将会话数据存储在远程数据库中,即使它没有更改(系统不会跟踪会话数据是否在请求期间被修改)。当您使用 IReadOnlySessionState 接口时,将跳过回写阶段。
它在哪里说 IRequiresSessionState 将写回会话(即使已经更改。)?
任何解释都将被排除在外。
我的朋友在这里问了一个问题
而回答他的人——写了一些有趣的东西!(没有任何证据,来源)。
当您使用进程外会话状态存储时,它会产生更大的差异。在这种情况下,如果没有接口,系统仍然会将会话数据存储在远程数据库中,即使它没有更改(系统不会跟踪会话数据是否在请求期间被修改)。当您使用 IReadOnlySessionState 接口时,将跳过回写阶段。
它在哪里说 IRequiresSessionState 将写回会话(即使已经更改。)?
任何解释都将被排除在外。
找不到有关此效果的正式文档,但启动 dotPeek (或其他一些反汇编程序)并System.Web
依次环顾四周表明:
HttpContext.Handler
是set
,如果处理程序实现IRequiresSessionState
,HttpContext._requiresSessionStateFromHandler
则设置true
;get
ter HttpContext.RequiresSessionState
;SessionStateModule
(我猜测它总是在模块管道中),在它的EndRequest
处理程序中,检查HttpContext.RequiresSessionState
,如果是true
,则与会话状态提供者对话以保存状态。