5

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

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

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

注意,Session 可能并不总是 InProc,会话可能在 State server 或 SQL server 中。

4

2 回答 2

5

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

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

于 2011-09-07T22:54:39.623 回答
4

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

于 2011-09-07T22:54:15.303 回答