2016-02-05 42 views
0

我一直在考慮一個任務來創建這是會使用一臺電腦在Windows IIS服務器託管基於瀏覽器的POS應用。當其他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"HttpApplicationState使用IIS

+1

您不能像這樣使用ApplicationState。對於所有用戶,ApplicationState在整個應用程序中都是相同的。 –

回答

1

HttpApplicationState是一個全球性的東西,它可用於應用程序的所有用戶。來自MSDN:

允許在ASP.NET應用程序中跨多個會話和請求共享全局信息。

應用程序狀態的典型用例是存儲從不或很少發生更改並且根本不依賴於用戶的東西。

如果您確實需要覆蓋值,但仍然希望它們對整個應用程序全局可用,請考慮使用緩存System.Runtime.Caching.MemoryCache而不是應用程序狀態。

存儲用戶特定的數據,你有兩個選擇:

  1. 會議。再次,從MSDN:

ASP.NET會話狀態在有限的時間窗口,在會話期間識別從相同的瀏覽器的請求,並且提供了一種持續變量值對於會話的持續時間。

請注意,會話在用戶完成使用該網站後不久就會死亡,並且存儲的內容不可用。

  • 數據庫的持久性。如果您能夠識別用戶,則可以將必要的用戶特定數據存儲在數據庫中。這種方法僅適用於經過身份驗證的用戶。
  • +0

    感謝您的回覆。我將使用會話變量。 – Nathangrad

    1

    MSDN for the HttpApplicationState類快速搜索顯示如下:

    「允許跨多個會話和ASP.NET應用程序中 請求全球信息共享。」

    「客戶端首次從特定的ASP.NET應用程序虛擬目錄中請求任何URL資源時,會創建一個HttpApplicationState類的單個實例。爲Web服務器上的每個ASP.NET應用程序創建一個單獨的實例。然後通過內部Application對象暴露對每個實例的引用。「