0

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

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

4

2 回答 2

1

MSDN 上快速搜索 HttpApplicationState类显示如下:

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

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

于 2016-02-05T11:12:51.480 回答
1

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

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

应用程序状态的典型用例是存储永远不会或很少更改并且根本不依赖于用户的东西。

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

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

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

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

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

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