Asp.net常用狀態管理方案有:
檢視狀態View state
隱藏欄位 Hidden Fields
Cookies
Query string
Application state
Session state
Profile
其中View state, hidden fields, cookies, and query strings將值以不同的方式儲存在用戶端。而application state, session state, and profile則在伺服器端將值以不同的形式儲存起來。
檢視狀態(View state)
View state會自動儲存web頁面各個元素的值,只要控制項的EnableViewState=true. ViewState以索引值對的形式儲存元素的值.在asp.net中,view state的值是以隱藏欄位的形式通過雜湊的方法儲存在頁面中,形同:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTN7+FHXsyXJ2Jnzu0UxkEXCEetrg==" />
如果使用View state來儲存資料,那麼資料的大小不能超過page的MaxPageStateFieldLength定義的值.
優點:
無需伺服器端資源,由於view state是儲存在頁面中的,所以無需借用伺服器端資源儲存值的問題.
使用簡易,只須以索引值對的形式即可儲存元素的值.
安全性方面由於view state儲存的值是經雜湊處理並且壓縮過的,所以使用起來要比Hidden Fields安全.
缺點:
效能問題,正因為view state將值儲存在Page中,因此每次在載入頁面過程中都會去裝載view state中儲存的值,因此帶來效能的損耗.
安全問題,雖然view state儲存的值是經雜湊處理並且壓縮處理的,但在頁面中仍然以hidden fields的形式存在,仍然易被駭客截取並利用.
隱藏欄位(Hidden Fields):
這是古老的asp儲存元素值的一種方式.使用Hidden Fields取決於頁面提交資料的方式.必須通過Post方法提交,才能取得Hidden Fields的值,如果使用Http的 Get方法,則該Hidden元素的值無效。
Hidden Fields另外一個特點就是,它儲存元素的值在Html代碼中是以明文的方式儲存的。可以很方便地查看頁面html原始碼得到hidden fields元素的值。
優點:
使用方便, 適用範圍廣,幾乎所有的瀏覽器和用戶端裝置都支援hidden fields這種形式.
缺點:
非常不安全
只能儲存非常簡單的資料,如string類型
效能問題,使用hidden fields如同view state一樣每次頁面顯示都要載入.
Cookies
Cookies也是在用戶端儲存資料的一種形式。Cookies可以長期儲存資料,也可以暫時儲存資料,這依賴於cookies的到期時間設定。Cookies對應的作用範圍是整個web網站,而不是某個頁面,它依賴於瀏覽器進行管理,如果用戶端瀏覽器禁用Cookies,那麼就無法啟用Cookies在用戶端儲存資料。Cookies伴隨著頁面的請求將資料發送到伺服器端,它的值可以通過Request來擷取。大多數瀏覽器支援Cookies能夠存放4M位元組的資料,同時瀏覽器對機器能夠容納的Cookies數也有限制,一般地,允許每個網站最多可以產生20個Cookies。
讀取Cookies的值:
if (Request.Cookies["UserSettings"] != null)
{
string userSettings;
if (Request.Cookies["UserSettings"]["Font"] != null)
{ userSettings = Request.Cookies["UserSettings"]["Font"]; }
}
向Cookies寫值:
Response.Cookies["UserSettings"]["Font"] = "Arial";
Response.Cookies["UserSettings"]["Color"] = "Blue";
Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(1d);
優點:
可以配置到期時間
無需佔用伺服器端資源
簡單易用
也可以保持持久資料
缺點:
大小限制,大多數瀏覽器置支援4M位元組。
受到使用者配置限制,如果瀏覽器禁用Cookies,那麼該項功能就沒法使用
潛在的安全隱患。 由於Cookies是以文字檔的形式存放在用戶端機器中,雖然Cookies的內容經過雜湊,但仍然可以被人擷取並利用。
查詢字串
查詢字串就是在頁面的URL後面加上一些參數,通過這種形式進行頁面之間的值傳遞。它提供了非常方便的頁面傳值方式。
形如:
http://www.abc.com/list.asp?id=1098&type=a100
優點:
簡單方便,應用非常廣泛
缺點:
極不安全,非常有必要藉助於URLEncode和URLDecode對字串進行處理以增強安全。
大小受到限制,一些瀏覽器或用戶端裝置只支援長度為2083的URL字串。
Application State
Asp.net允許你以Application state的方式儲存值--它是HttpApplicationState類的一個執行個體。Application state提供一個全域的儲存方式,可以被web 應用程式的每一個頁面擷取。Application state和Session State一樣,以索引值對的形式儲存值。
優點:
全域範圍
缺點:
全域範圍
佔用伺服器資源
脆弱性,由於Application State是儲存在記憶體中,因此當應用程式停止或重啟時會丟失。
擴充性差,無法在多個伺服器或多個處理器之間共用。
SessionState
Session State和Application state有點類似,但它作用於瀏覽器的會話中。如果不同的使用者使用你的應用程式會產生不同的session會話。Session state也是以鍵/值對的形式儲存資料。
優點:
使用方便
資料持久,因為asp.net提供的Session克服了原來asp進程依賴性的缺陷,可以將Session儲存在資料庫中,因此session的資料永久不會丟失。
無需Cookies支援,這也是asp.net的一大改進之處,可以在ASP.NET中用戶端的Session資訊以Cookieless方式儲存。
缺點:
由於Session變數儲存在伺服器端,因此佔用伺服器端資源。
Profile
以Profile的形式儲存資料是asp.net2.0提供的一個新功能。它是將資訊儲存在資料庫中的,因此永久不會丟失資訊。
優點:
資料持久性
可擴充
缺點:
由於profile將資料存放區在資料庫中,因此存在以下特點,
需要人工維護資料,
效能略差