我知道何时回收应用程序池时会启动一个新的工作进程,但我对在此过程中如何处理过期和有效的会话感到困惑?哪些传递给新的工作进程线程,哪些被消除?它会做什么:
回收后,当用户A和用户B请求时,他们的会话状态是什么?
如果您只有一台Web服务器,并且已使用默认InProc
模式实现SessionState持久性,则在应用程序池回收期间-在回收之后,当您在服务器代码中添加到会话词典中的所有数据都将丢失。您的代码接下来访问SessionState
字典中的条目,它将返回null
。
如果您在负载均衡器上有多个Web服务器,并且会话状态错误地配置为InProc
,并且用户返回到其他服务器(即,没有固定路由),则也会类似地发生。
(存储在浏览器中的会话状态cookie可能仍然有效几分钟。)
允许会话状态“生存”一个应用程序池回收,服务器崩溃或跨服务器场的方法是保留存储在中的数据SessionState
,以便当用户会话时,一个(或多个)服务器可以再次检索数据。返回。最简单的方法是使用一种现成的解决方案,即一个单独的StateServer
过程,或者将状态存储在SqlServer
数据库中。自定义持久性也是一种选择。
请注意,以“进程外”模式存储的任何数据(例如StateServer
或SqlServer
需要可序列化),当您退出时,这可能是一项重大更改InProc
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句