Asp.net常用狀態管理方案分析

來源:互聯網
上載者:User

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將資料存放區在資料庫中,因此存在以下特點,
需要人工維護資料,
效能略差

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.