当一个 MVC Web 应用程序托管在多个用户同时访问的服务器上时,应用程序和会话变量会发生啥?

Posted

技术标签:

【中文标题】当一个 MVC Web 应用程序托管在多个用户同时访问的服务器上时,应用程序和会话变量会发生啥?【英文标题】:What happened to application and session variables when one MVC web application hosted on a server accessed by multiple users at the same time?当一个 MVC Web 应用程序托管在多个用户同时访问的服务器上时,应用程序和会话变量会发生什么? 【发布时间】:2015-11-06 09:15:05 【问题描述】:

我们可以在 ASP.NET MVC 中定义应用程序和会话变量。如果我有一个托管在服务器中的 Web 应用程序,那么在多用户环境中,对于同时使用该网站的每个用户,如何处理应用程序和会话变量。意味着每次来自多个用户的请求时,应用程序变量都会启动?我只是想详细了解 ASP.NET mvc 中的应用程序和会话变量会发生什么。

【问题讨论】:

关于会话变量与应用程序变量的文章和博客有很多,只需搜索即可。 【参考方案1】:

会话变量对于服务器上的每个不同会话都有一个关联的值。这意味着当会话终止时,它们的变量值会消失并在用户再次进入新会话时重置。

另一方面,应用程序变量对服务器中的所有会话都是通用的。必须负责任地使用它,因为修改它的值会影响全局的整个应用程序。

在 IIS 上重新启动应用程序时(例如,当您更新项目时),会话和应用程序变量会重新启动。

【讨论】:

警告:进程内会话状态(默认)不适合平衡服务器场景。您需要使用会话状态服务器或 SQL 后端。【参考方案2】:

会话变量:

    会话变量在整个应用程序中可供特定用户使用和访问。 这些变量可用并存储在网络服务器上。 一旦用户会话超时,变量就会被销毁,默认超时为 20 分钟,但可在 web.config 中进行配置。一旦用户注销(通过会话放弃),会话变量也会被销毁。

应用变量:

    应用程序变量可跨应用程序和所有会话(多用户全局数据)使用和访问。 这些也可用并存储在网络服务器中。 一旦通过重新启动应用程序池/IIS 重置等方式重新启动托管进程,变量就会被销毁。

【讨论】:

以上是关于当一个 MVC Web 应用程序托管在多个用户同时访问的服务器上时,应用程序和会话变量会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何从同一服务器托管 Web 应用程序和 API,同时将它们分开?

如何在单个 Microsoft ASP.NET MVC Web 应用程序中同时支持个人用户帐户和工作或学校帐户?

WCF 服务作为 MVC 应用程序的一部分

在 MVC Web 应用程序中托管 WCF 服务

多个用户同时读取密钥时的 web.config 问题

当用户从托管在 Digital Ocean 上的 Web 应用程序将图像上传到 AWS S3 时,是出站还是入站带宽传输?