【问题标题】:Can ASP.NET session live longer than ApplicationASP.NET 会话的寿命是否比应用程序长
【发布时间】:2011-11-12 13:45:33
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我正在寻找另一个方向的场景。如果应用程序终止(例如通过重新启动 IIS 或进程回收等)会发生什么情况,会话是否仍处于活动状态?
    • 好吧,如果您将会话存储在数据库或状态服务器中,那么是的,客户端仍然会有会话 cookie。所以下次他们访问并且应用程序启动时,他们的会话可以重新启动(因为会话数据仍然针对 sessionid 持续存在)。
    • 嗯,谢谢。我试图将有关会话的一些信息保存到应用程序(静态变量)中。但看起来我们不能保证静态变量总是对每个活动会话都有价值。这很可悲:(
    • 当应用程序结束时,静态数据会丢失。这是个坏主意。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2013-06-28
      • 2011-09-11
      相关资源
      最近更新 更多