代码之家  ›  专栏  ›  技术社区  ›  BVernon

不同主机名访问的同一应用程序之间是否共享静态变量?

  •  0
  • BVernon  · 技术社区  · 6 年前

    我已经相当肯定答案是否定的,但似乎找不到确切的答案。如果我部署了一个可以被多个主机名访问的应用程序,那么每个主机名都会启动自己的应用程序实例,静态变量不会在它们之间共享,对吧?

    编辑:宿主环境是IIS,只有一个网站具有对不同主机名的多个绑定。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Conrad    6 年前

    iis允许您设置网站实际可以运行的实例数。如果将IIS配置为只运行一个实例,并且多个域指向此单个实例,则可以访问变量。由于资源管理的原因,IIS将在需要时重新启动这些实例,并且经常会重新启动。这就是为什么如果请求进入并发现IIS已经重新启动了实例,那么它将已经丢失以前静态变量值的内容。但是,如果找到相同的实例,静态变量仍将保持其值。

    不建议使用静态变量来处理交叉请求消息,因为大多数宿主提供程序不使用单个实例来运行您的网站,但可以使用Web场来运行。这进一步说明了在处理会话时使用in-proc会话不好的原因。[因为一旦实例重新启动,会话值将丢失]。

    从web服务器场开始,许多实例开始处理多个传入请求。因此,一个请求可以由另一个不同于处理前一个请求的实例处理。处理请求的新实例将不具有其他实例的变量值。即使是同一个网站的副本。这是因为它们被识别为同时在服务器上运行的两个不同的应用程序,并且操作系统不允许在两个不同的应用程序之间直接共享静态变量。

    但是,您可以充分利用IIS中的服务器端应用程序设置,或使用Cookie跨多个域路由信息。例如,这些将使您能够为系统的所有其他网站处理来自单个网站的单个登录。当认证网站设置cookie时,您可以实现此目的,其他网站可以访问这些cookie。net允许您这样做。

    谢谢你