【问题标题】:HttpApplicationState using IIS使用 IIS 的 HttpApplicationState
【发布时间】:2016-05-15 07:55:13
【问题描述】:

我的任务是创建一个基于浏览器的 POS 应用程序,该应用程序将使用一台 PC 上的 Windows IIS 服务器托管。当其他几台 PC 和平板电脑都连接到同一网络时,它们将通过在其浏览器中输入托管它的 PC 的 IP 来访问应用程序的功能。该应用程序将在 ASP.NET 中使用 C# 作为 ASPX 页面背后的代码进行编程。
我的问题如下:如果我使用 HttpApplicationState (var x = Application["testVariable"];) 来存储变量,它们对于连接到该站点的每个设备来说是本地的,还是所有设备都可以访问它们并且可以被覆盖?

示例:
iPad 连接并以用户 A 身份登录。我将变量 Application["userName"] 设置为字符串 "Nathangrad"。然后,PC 连接并以用户 B 身份登录。我将相同的变量设置为 "OtherUser"。现在,如果我在 iPad 上拨打Application["userName"],我会得到"Nathangrad" 还是"OtherUser"

【问题讨论】:

  • 你不能这样使用 ApplicationState。对于所有用户,ApplicationState 在整个应用程序中都是相同的。

标签: c# asp.net iis httpapplicationstate


【解决方案1】:

HttpApplicationState 是一个全局的东西,它可供应用程序的所有用户使用。来自 MSDN:

允许在 ASP.NET 应用程序内的多个会话和请求之间共享全局信息。

应用程序状态的典型用例是存储永远不会或很少更改且完全不依赖于用户的内容。

如果您确实需要覆盖值,但仍希望它们对整个应用程序全局可用,请考虑使用缓存 System.Runtime.Caching.MemoryCache 而不是应用程序状态。

要存储用户特定的数据,您有两种选择:

  1. 会话。同样,来自 MSDN:

ASP.NET 会话状态将在有限时间窗口内来自同一浏览器的请求标识为会话,并提供一种在该会话期间保持变量值的方法。

请注意,在用户使用完网站后不久会话就会终止,并且存储的任何内容都将变得不可用。

  1. 数据库持久性。如果您能够识别您的用户,您可以在数据库中存储必要的用户特定数据。这种方法仅适用于经过身份验证的用户。

【讨论】:

  • 感谢您的回复。我将使用 Session 变量。
【解决方案2】:

MSDN for the HttpApplicationState 类的快速搜索显示以下内容:

“支持跨多个会话共享全局信息和 ASP.NET 应用程序中的请求。”

“当客户端第一次从特定的 ASP.NET 应用程序虚拟目录中请求任何 URL 资源时,将创建 HttpApplicationState 类的单个实例。为 Web 服务器上的每个 ASP.NET 应用程序创建一个单独的单个实例。然后通过内部 Application 对象公开对每个实例的引用。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2010-12-02
    • 2016-09-12
    相关资源
    最近更新 更多