繁体   English   中英

应用程序池回收如何影响ASP Net会话状态?

[英]How does an application pool recycle affect ASP Net Session State?

我知道,当应用程序池被回收时,会启动一个新的工作进程,但我对在此过程中如何处理过期和有效会话感到困惑? 传递给新的工作进程线程哪些被淘汰? 它会做什么:

  • 用户A的会话已过期
  • 用户B的会话有效

在回收之后,当用户A和用户B将要求他们的会话状态是什么时?

如果您有一个Web服务器,并且您已使用默认的InProc模式进行SessionState持久性,那么您在服务器代码中添加到会话的Dictionary中的任何数据都将在应用程序池回收期间丢失 - 在回收后,当您的代码接下来访问SessionState字典中的条目时,它将返回null

如果跨负载均衡器有多个Web服务器,会话状态错误地配置为InProc ,并且用户返回到其他服务器(即没有粘性路由),则会发生类似情况。

(存储在浏览器上的会话状态cookie可能仍有效几分钟)。

允许会话状态“存活”应用程序池回收,服务器崩溃或跨越服务器场的方式是保留存储在SessionState数据,以便服务器(或多个服务器)可以在用户的​​时候再次检索数据会话返回。 最简单的方法是使用开箱即用的解决方案之一,即单独的StateServer进程,或在SqlServer数据库中存储状态。 自定义持久性也是一种选择。

一个警告 - 请注意,您在“进程外”模式下存储的任何数据(如StateServerSqlServer需要可序列化 - 当您切换出InProc时,这可能是一个重大变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM