ASP.NET会话可以比Application更长寿

时间:2011-09-07 22:51:34

标签: asp.net session-state session-variables application-variables

这可能是一个愚蠢/蹩脚的问题,特别是在使用ASP.NET :)这么长时间之后,但我需要确定。

是否可以让会话(即ASP.NET会话)比应用程序(应用程序实例/应用程序域/应用程序变量)更长?

换句话说,如果在Global.asax中调用Application_End,它是否表示不再有活动会话?任何新请求都会导致Application_Start后跟一个新的Session_Start?

注意,会话可能并不总是InProc,会话可能位于状态服务器或SQL服务器中。

2 个答案:

答案 0 :(得分:5)

使用默认的InProc会话状态,应用程序将在上一个会话到期时终止,此时会发生Application_End。在这种情况下,整个appDomain被拆除,所有内存都被释放。由于会话在内存中持久存在,因此它们会在此时被永久销毁,因此永远不会超出应用程序的生命周期。

如果使用会话存储在单独计算机上的Sql ServerState Server,那么当应用程序被拆除时,会话可以继续存在。然后,因为客户端在浏览器中保留原始会话cookie,所以下次访问该站点时会重新启动会话,并sessionid用于标识其现有会话。

答案 1 :(得分:4)

是的,当您在SQL Server中放置状态时,应用程序可能会重新启动,但您仍将保持会话状态