这可能是一个愚蠢/蹩脚的问题,特别是在使用ASP.NET :)这么长时间之后,但我需要确定。
是否可以让会话(即ASP.NET会话)比应用程序(应用程序实例/应用程序域/应用程序变量)更长?
换句话说,如果在Global.asax中调用Application_End,它是否表示不再有活动会话?任何新请求都会导致Application_Start后跟一个新的Session_Start?
注意,会话可能并不总是InProc,会话可能位于状态服务器或SQL服务器中。
答案 0 :(得分:5)
使用默认的InProc
会话状态,应用程序将在上一个会话到期时终止,此时会发生Application_End
。在这种情况下,整个appDomain
被拆除,所有内存都被释放。由于会话在内存中持久存在,因此它们会在此时被永久销毁,因此永远不会超出应用程序的生命周期。
如果使用会话存储在单独计算机上的Sql Server
或State Server
,那么当应用程序被拆除时,会话可以继续存在。然后,因为客户端在浏览器中保留原始会话cookie,所以下次访问该站点时会重新启动会话,并sessionid
用于标识其现有会话。
答案 1 :(得分:4)
是的,当您在SQL Server中放置状态时,应用程序可能会重新启动,但您仍将保持会话状态