ASP.NET狀態管理之十三(總結)

來源:互聯網
上載者:User

狀態管理是您對同一頁或不同頁的多個請求維護狀態和頁資訊的過程。與所有基於 HTTP 的技術一樣,Web Form頁是無狀態的,這意味著它們不自動指示序列中的請求是否全部來自相同的用戶端,或者單個瀏覽器執行個體是否一直在查看頁或網站。此外,到伺服器的每一往返過程都將銷毀並重新建立頁;因此,如果超出了單個頁的生命週期,頁資訊將不存在。

ASP.NET 提供多種方式來在伺服器往返過程之間維護狀態。對這些狀態管理選項的選擇主要取決於您的應用程式,並且應基於以下條件:
需要儲存的資訊量有多大?
用戶端是接受持久性的還是記憶體中的 Cookie?
要將資訊儲存在用戶端還是伺服器上?
資訊是否是敏感資訊?
您對應用程式設定了什麼樣的效能和頻寬條件?
目標瀏覽器和裝置具有什麼樣的功能?
您是否需要儲存基於使用者的資訊?
資訊需要儲存多長時間?
您使用 Web 場(多個伺服器)、Web 園(一個電腦上的多個進程)還是單個進程來運行應用程式?

 

用戶端狀態管理
檢視狀態

Web Form頁提供 ViewState 屬性作為內建結構,在對同一頁的多個請求間自動保留值。檢視狀態作為頁中的隱藏欄位來進行維護。

可以使用檢視狀態在頁回傳到自身時跨越往返過程儲存您自己的頁特定值。例如,如果您的應用程式正在維護使用者特定的資訊(即,該資訊在頁上使用,但不是任何控制項所必需的部分),則可以使用檢視狀態儲存該資訊。

使用檢視狀態的優點
不需要任何伺服器資源   檢視狀態包含在頁代碼內的結構中。
實現簡單   檢視狀態無需使用任何自訂編程。預設情況下對控制項啟用狀態資料的維護。
增強安全功能   檢視狀態中的值經過雜湊計算和壓縮,並且針對 Unicode 實現進行編碼,其安全性要高於使用隱藏欄位。

使用檢視狀態的缺點
效能注意事項   由於檢視狀態儲存在頁本身,因此如果儲存較大的值,使用者顯示頁和發送頁時的速度可能會減慢。尤其是對行動裝置,其頻寬通常是有限的。
裝置限制   行動裝置可能沒有足夠的記憶體容量來儲存大量的檢視狀態資料。
潛在的安全風險   檢視狀態儲存在頁上的一個或多個隱藏欄位中。雖然檢視狀態以雜湊格式儲存資料,但它可以被篡改。如果直接查看頁輸出源,可以看到隱藏欄位中的資訊,這導致潛在的安全性問題。

 

控制項狀態
ASP.NET 頁架構提供了 ControlState 屬性作為在伺服器往返過程中儲存自訂控制項資料的方法。例如,如果您編寫的自訂控制項使用多個不同的選項卡來顯示不同的資訊,為使此控制項能夠按預期方式工作,控制項需要知道在往返過程中哪個選項卡被選中。檢視狀態可用於此目的,但是開發人員可能在頁級將檢視狀態關閉,這實際上破壞了您的控制項。與檢視狀態不同,控制項狀態不能被關閉,因此它提供了儲存控制項狀態資料的更可靠方法。

使用控制項狀態的優點
不需要任何伺服器資源   預設情況下,控制項狀態儲存在頁上的隱藏欄位中。
可靠性   因為控制項狀態不像檢視狀態那樣可以關閉,控制項狀態是管理控制項的狀態的更可靠方法。
通用性   可以編寫自訂配接器來控制如何儲存控制項狀態資料和控制項狀態資料的儲存位置。

使用控制項狀態的缺點
需要一些編程   雖然 ASP.NET 頁架構為控制項狀態提供了基礎,但是控制項狀態是一個自訂的狀態保持機制。為了充分利用控制項狀態,您必須編寫代碼來儲存和載入控制項狀態。

 

隱藏欄位
可以在頁上的隱藏欄位中儲存特定於頁的資訊,作為維護頁的狀態的一種方式。

如果使用隱藏欄位,最好在用戶端上只儲存少量經常更改的資料。

注意
如果使用隱藏欄位,則必須使用 HTTP POST 方法向伺服器提交頁,而不是使用通過頁 URL 請求該頁的方法(HTTP GET 方法)向伺服器提交頁。

使用隱藏欄位的優點
不需要任何伺服器資源   隱藏欄位在頁上儲存和讀取。
廣泛的支援   幾乎所有瀏覽器和用戶端裝置都支援具有隱藏欄位的表單。
實現簡單   隱藏欄位是標準的 HTML 控制項,不需要複雜的編程邏輯。

使用隱藏欄位的缺點
潛在的安全風險   隱藏欄位可以被篡改。如果直接查看頁輸出源,可以看到隱藏欄位中的資訊,這導致潛在的安全性問題。您可以手動加密和解密隱藏欄位的內容,但這需要額外的編碼和開銷。如果關注安全,請考慮使用基於伺服器的狀態機器制,從而不將敏感資訊發送到用戶端。
簡單的儲存結構   隱藏欄位不支援複雜資料類型。隱藏欄位只提供一個字串範圍存放資訊。若要儲存多個值,必須實現分隔的字串以及用來分析那些字串的代碼。您可以手動分別將複雜資料類型序列化為隱藏欄位以及將隱藏欄位還原序列化為複雜資料類型。但是,這需要額外的代碼來實現。如果您需要將複雜資料類型儲存在用戶端上,請考慮使用檢視狀態。檢視狀態內建了序列化,並且將資料存放區在隱藏欄位中。
效能注意事項   由於隱藏欄位儲存在頁本身,因此如果儲存較大的值,使用者顯示頁和發送頁時的速度可能會減慢。
儲存限制   如果隱藏欄位中的資料量過大,某些代理和防火牆將阻止對包含這些資料的頁的訪問。因為最大數量會隨所採用的防火牆和代理的不同而不同,較大的隱藏欄位可能會出現偶發性問題。如果您需要儲存大量的資料項目,請考慮執行下列操作之一:
將每個項放置在單獨的隱藏欄位中。
使用檢視狀態並開啟檢視狀態分塊,這樣會自動將資料分割到多個隱藏欄位。
不將資料存放區在用戶端上,將資料保留在伺服器上。向用戶端發送的資料越多,您的應用程式的表面回應時間越慢,因為瀏覽器需要下載或發送更多的資料。

 

Cookie
Cookie 用於在用戶端上儲存少量經常更改的資訊。這些資訊與請求一起發送到伺服器。

使用 Cookie 的優點
可配置到期規則   Cookie 可以在瀏覽器會話結束時到期,或者可以在用戶端電腦上無限期存在,這取決於用戶端的到期規則。
不需要任何伺服器資源   Cookie 儲存在用戶端並在發送後由伺服器讀取。
簡單性   Cookie 是一種基於文本的輕量結構,包含簡單的索引值對。
資料持久性   雖然用戶端電腦上 Cookie 的期間取決於用戶端上的 Cookie 到期處理和使用者幹預,Cookie 通常是用戶端上期間最長的資料保留形式。

使用 Cookie 的缺點
大小受到限制   大多數瀏覽器對 Cookie 的大小有 4096 位元組的限制,儘管在當今新的瀏覽器和用戶端裝置版本中,支援 8192 位元組的 Cookie 大小已愈發常見。
使用者配置為禁用   有些使用者禁用了瀏覽器或用戶端裝置接收 Cookie 的能力,因此限制了這一功能。
潛在的安全風險   Cookie 可能會被篡改。使用者可能會操縱其電腦上的 Cookie,這意味著會對安全性造成潛在風險或者導致依賴於 Cookie 的應用程式失敗。另外,雖然 Cookie 只能被將它們發送到用戶端的域訪問,曆史上駭客已經發現從使用者電腦上的其他域訪問 Cookie 的方法。您可以手動加密和解密 Cookie,但這需要額外的編碼,並且因為加密和解密需要耗費一定的時間而影響應用程式的效能。

注意
Cookie 通常用於為已知使用者自訂內容的個人化情況。在大多數此類情況中,Cookie 是作為“標識”而不是“身分識別驗證”。因此,通常保護用於標識的 Cookie 的方法是在 Cookie 中儲存使用者名稱、帳戶名稱或唯一使用者識別碼(例如 GUID),然後用以訪問網站的使用者個人化結構中的資訊。

 

查詢字串
查詢字串是在頁 URL 的結尾附加的資訊。

可以使用查詢字串來通過 URL 將資料提交回您的頁或另一頁上。查詢字串提供一種維護某些狀態資訊的簡單但有限的方法。例如,它們是將資訊從一頁傳送到另一頁的簡便的方法(例如,將產品號傳遞到將處理該產品號的另一頁)。

使用查詢字串的優點
不需要任何伺服器資源   查詢字串包含在對特定 URL 的 HTTP 要求中。
廣泛的支援   幾乎所有的瀏覽器和用戶端裝置均支援使用查詢字串傳遞值。
實現簡單   ASP.NET 完全支援查詢字串方法,其中包含了使用 HttpRequest 對象的 Params 屬性讀取查詢字串的方法。

使用查詢字串的缺點
潛在的安全性風險   使用者可以通過瀏覽器使用者介面直接看到查詢字串中的資訊。使用者可將此 URL 設定為書籤或發送給別的使用者,從而通過此 URL 傳遞查詢字串中的資訊。如果您擔心查詢字串中的任何敏感性資料,請考慮使用表單(使用 POST 而不是查詢字串)中的隱藏欄位。
有限的容量   有些瀏覽器和用戶端裝置對 URL 的長度有 2083 個字元的限制。

伺服器端狀態管理
應用程式狀態
ASP.NET 通過 HttpApplicationStatefrlrfSystemWebHttpApplicationStateClassTopic 類將應用程式狀態提供為一種儲存全域應用程式特定資訊(對於整個應用程式都可見)的方法。應用程式狀態變數實際上是 ASP.NET 應用程式的全域變數。

您可以在應用程式狀態中儲存應用程式特定的值,應用程式狀態將由伺服器來管理。

由多個會話共用並且不經常更改的資料是插入到應用程式狀態變數的理想資料。

使用應用程式狀態的優點
實現簡單   應用程式狀態便於使用,為 ASP 開發人員所熟悉,並且與其他 .NET Framework 類一致。
應用程式範圍   由於應用程式狀態可供應用程式中的所有頁來訪問,因此在應用程式狀態中儲存資訊可能意味著僅保留資訊的一個副本(例如,相對於在工作階段狀態或在單獨頁中儲存資訊的多個副本)。

使用應用程式狀態的缺點
應用程式範圍   應用程式狀態的範圍可能也是一項缺點。在應用程式狀態中儲存的變數僅對於該應用程式正在其中啟動並執行特定進程而言是全域的,並且每一應用程式進程可能具有不同的值。因此,不能依賴應用程式狀態來儲存唯一值或更新 Web 場和 Web 園伺服器配置中的全域計數器。
資料持久性有限   因為在應用程式狀態中儲存的全域資料是易失的,所以如果包含這些資料的 Web 服務器進程被損壞(如因伺服器崩潰、升級或關閉而損壞),將丟失這些資料。
資源要求   應用程式狀態需要伺服器記憶體,這可能會影響伺服器的效能以及應用程式的延展性。

應用程式狀態的精心設計和實現可以提高 Web 應用程式效能。例如,如果將常用的、相關的待用資料集放置到應用程式狀態中,則可以通過減少對資料庫的資料請求總數來提高網站效能。但是,這裡存在一種效能平衡。當伺服器負載增加時,包含大塊資訊的應用程式狀態變數就會降低 Web 服務器的效能。在移除或替換值之前,將不釋放在應用程式狀態中儲存的變數所佔用的記憶體。因此,最好只將應用程式狀態變數用於更改不頻繁的小型資料集。

 

工作階段狀態
ASP.NET 提供了一種工作階段狀態,該工作階段狀態可作為 HttpSessionState 類或儲存會話特定資訊(僅在該會話中可見)的方法來使用。ASP.NET 工作階段狀態將一個有限時間視窗內來自同一瀏覽器的請求標識為一個會話,並在該會話持續期間保留變數的值。

可以在工作階段狀態中儲存會話特定的值和對象,該工作階段狀態對象將由伺服器來進行管理並可用於瀏覽器或用戶端裝置。儲存在工作階段狀態變數中的理想資料是特定於單獨會話的短期的、敏感的資料。

使用工作階段狀態的優點
實現簡單   工作階段狀態功能便於使用,為 ASP 開發人員所熟悉,並且與其他 .NET Framework 類一致。
會話特定的事件   會話管理事件可以由應用程式引發和使用。
資料持久性   放置於工作階段狀態變數中的資料可以經受得住 Internet 資訊服務 (IIS) 重新啟動和輔助進程重新啟動,而不丟失會話資料,這是因為這些資料存放區在另一個進程空間中。此外,工作階段狀態資料可跨多進程保持(例如在 Web 場或 Web 園中)。
平台延展性   工作階段狀態可在多電腦和多進程配置中使用,因而最佳化了延展性方案。
無需 Cookie 支援   儘管工作階段狀態最常見的用途是與 Cookie 一起向 Web 應用程式提供使用者標識功能,但工作階段狀態可用於不支援 HTTP Cookie 的瀏覽器。但是,使用無 Cookie 的工作階段狀態需要將工作階段識別項放置在查詢字串中(同樣會遇到本主題在查詢字串一節中陳述的安全問題)。
可擴充性   您可通過編寫自己的工作階段狀態提供者自訂和擴充工作階段狀態。然後可以通過多種資料存放區機制(例如資料庫、XML 檔案甚至 Web 服務)將工作階段狀態資料以自訂資料格式儲存。

使用工作階段狀態的缺點
效能注意事項   工作階段狀態變數在被移除或替換前保留在記憶體中,因而可能降低伺服器效能。如果工作階段狀態變數包含諸如大型資料集之類的資訊塊,則可能會因伺服器負荷的增加影響 Web 服務器的效能。

 

設定檔屬性
ASP.NET 提供了一個稱為設定檔屬性的功能,可讓您儲存特定於使用者的資料。除了當使用者的會話到期時設定檔資料不丟失這點與工作階段狀態不同外,它與工作階段狀態類似。設定檔屬性功能使用 ASP.NET 設定檔,ASP.NET 設定檔以固定的格式儲存並與單個使用者相關聯。ASP.NET 設定檔可讓您輕鬆地系統管理使用者資訊,而無需建立和維護自己的資料庫。此外,設定檔使用了一個強型別 API,您可以在應用程式中的任何位置訪問該 API,從而使用使用者資訊。您可以在設定檔中儲存任何類型的對象。ASP.NET 設定檔功能提供了一個通用儲存系統,使您能夠定義和維護幾乎任何類型的資料,同時仍可用型別安全的方式使用資料。

使用設定檔屬性的優點
資料持久性   放置在設定檔屬性中的資料在 IIS 和輔助進程重新啟動過程中得以保留而不會遺失資料,因為資料存放區在一個外部機制中。此外,設定檔屬性可跨多進程保持(例如在 Web 場或 Web 園中)。
平台延展性   設定檔屬性可在多電腦和多進程配置中使用,因而最佳化了延展性方案。
可擴充性   為了使用設定檔屬性,您必須對設定檔提供者進行配置。ASP.NET 提供了一個 SqlProfileProvider 類,使您可以將設定檔資料存放區在 SQL 資料庫中,但您也可以建立自己的設定檔提供者類將設定檔資料按自訂格式儲存到自訂儲存機制中,例如 XML 檔案甚至 Web 服務。

使用設定檔屬性的缺點
效能注意事項   設定檔屬性通常比使用工作階段狀態慢,因為前者將資料持久儲存到資料存放區裝置而非記憶體中。
額外的配置要求   與工作階段狀態不同,設定檔屬性功能需要使用相當數量的配置。若要使用設定檔屬性,您不僅要對設定檔提供者進行配置,還要預先配置您想要儲存的所有設定檔屬性。
資料維護   設定檔屬性需要一定的維護。因為設定檔資料持久儲存到存放裝置中,所以必須確保在資料陳舊時,應用程式調用由設定檔提供者提供的相應清理機制。

 

資料庫支援
在某些情況中,您可能希望使用資料庫支援來維護網站上的狀態。通常,資料庫支援與 Cookie 或工作階段狀態結合在一起使用。例如,對於電子商務網站,普遍使用關聯式資料庫維護狀態資訊,其原因是:
安全性
個人化
一致性
資料採礦

下面是支援 Cookie 的資料庫網站的常見功能:
安全性   訪問者將帳戶名稱和密碼鍵入到網站登入頁中。網站結構通過登入值查詢資料庫以確定該使用者是否有權使用您的網站。如果資料庫確認該使用者資訊有效,網站將把包含該使用者的唯一 ID 的有效 Cookie 分發到用戶端電腦上。網站授予該使用者存取權限。
個人化   通過網站中儲存的安全性資訊,您的網站能夠藉助讀取用戶端電腦上的 Cookie 來區分網站上的每一使用者。通常,網站在資料庫中具有資訊,描述使用者的喜好設定(由唯一 ID 標識)。此關係通稱作個人化。網站可以使用在 Cookie 中包含的唯一 ID 獲知使用者的喜好設定,然後向使用者提供與使用者的特定願望相關並在一段時間內對使用者喜好設定作出反應的內容和資訊。
一致性   如果您已建立了一個商業網站,您可能想要在網站上保留所購買的物品和服務的交易記錄。這些資訊能夠可靠地儲存在您的資料庫中並通過使用者的唯一 ID 來引用。它可用於確定購買交易是否完成,還可確定如果購買交易失敗所應採取的操作步驟。這些資訊還可用於通知使用者使用您的網站所下的訂單的狀態。
資料採礦   有關網站使用、訪問者或產品交易的資訊能夠可靠地儲存在資料庫中。例如,業務發展部門可能希望使用從該網站收集的這些資料確定下一年的產品線或分銷策略。市場營銷部門可能希望查看有關您的網站的使用者的人口統計資訊。設計和支援部門可能希望查看交易並記下購買過程可以改進的地區。諸如 Microsoft SQL Server 之類的大多數企業級關聯式資料庫提供了可適用於大多數資料採礦項目的可擴充工具集。

在上述方案中通過將網站設計為在每一一般性階段使用唯一 ID 重複查詢該資料庫,該網站對狀態進行維護。在此方法中,使用者感受到網站正記住和響應其本人。

使用資料庫維護狀態的優點
安全性   訪問資料庫需要嚴格的身分識別驗證和授權。
儲存容量   可以根據需要在資料庫中儲存儘可能多的資訊。
資料持久性   可以根據需要在儘可能長的時間記憶體儲資料庫資訊,這些資訊不受 Web 服務器可用性的影響。
可靠性和資料完整性   資料庫包括多種用於維護有效資料的功能,其中包括觸發器和參考完整性、事務等。通過在資料庫中(而不是在工作階段狀態等對象中)儲存有關事務的資訊,可以更為方便地從錯誤恢複。
可訪問性   儲存在資料庫中的資料可供眾多的資訊處理工具訪問。
廣泛的支援   有大量資料庫工具可供使用,並且有許多自訂配置可供使用。

使用資料庫維護狀態的缺點
複雜性   使用資料庫支援狀態管理需要更複雜的硬體和軟體配置。
效能注意事項   不佳的關係資料模型結構可能導致延展性問題。此外,對資料庫執行過多的查詢可能會影響伺服器效能。

 

http://aierong.cnblogs.com

Sql Server2005 Transact-SQL 新兵器學習總結之-總結
MS SQLDatabase Backup和恢複預存程序(加強版本)
sql server中分散式查詢隨筆(連結的伺服器(sp_addlinkedserver)和遠程登入映射(sp_addlinkedsrvlogin)使用小總結)
ASP.NET2.0國際化/本地化應用程式的實現總結(多語言,多文化頁面的實現)
WAP開發資料站(最新更新)
自訂格式字串隨筆 (IFormattable,IFormatProvider,ICustomFormatter三介面的實現)
Mcad學習筆記之非同步編程(AsyncCallback 委託,IAsyncResult介面,BeginInvoke方法,EndInvoke方法的使用小總結)
Mcad學習筆記之通過反射調用類的方法,屬性,欄位,索引器(2種方法)
Mcad學習筆記之序列化(2進位和Soap序列化)
Mcad學習筆記之委託再理解(delegate的構造器,BeginInvoke,EndInvoke,Invoke4個方法的探討)
WinForm開發,表單顯示和表單傳值相關知識總結
Mcad學習筆記之Microsoft Windows服務
copy某目錄下的所有的目錄和檔案到目的目錄(目錄數據備份)
ASP.NET狀態管理之一(概括篇)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.