ASP.NET狀態儲存分為用戶端儲存和伺服器端儲存兩種:
使用用戶端選項儲存頁資訊而不使用伺服器資源的這些選項往往具有最低的安全性但具有最快 的伺服器效能,因為對伺服器資源的要求是適度的。但是,由於必須將資訊發送到用戶端來進行儲存,因此對於以這種方式可以儲存多少資訊存在一定的客觀限制。
用戶端儲存的方式一般有如下4種:
1 ViewState:
利用場合為:在對同一頁的多個請求間自動保留值,多用於用戶端的一些事件。,典型利用場合為:頁面資訊重設, 登陸出錯次數統計,Grid列排序等。
優點:不利用伺服器端資源,實現簡單,相對高的安全性:因為經過雜湊計算和壓縮,並且針對 Unicode 實現進行編碼。
缺點:因為ViewState儲存在頁面本身,所以無法儲存較大的值。並且通過源檔案可以看見其中的值 ,雖然經過雜湊計算和壓縮,但仍有被篡改的風險。
可儲存的類型:string,integer,bool,array,arr aylist,hashtable以及其他可以序列化的類型。
2 HiddenField:
利用場合為:儲存少量頁面中經常改動的資訊,多和用戶端指令碼一塊使用,典型利用場合為:用戶端經曆一系列驗證之後向伺服器端回傳,伺服器端從用戶端HiddenField中擷取值,進行處理。例如 :LeyserHomepage中,要刪除一項產品,需要在用戶端彈出確認Form,使用者確認之後再PostBac k回伺服器端進行資料庫Delete操作,當使用者確認要刪除時,將當前要刪除的產品ID存放到一個HiddenField中,然後執行 Form(0).submit回傳到伺服器端,伺服器端再從HiddenField擷取產品ID值,進行資料庫操作。
優點:不使用伺服器資源 ,廣泛支援,實現簡單
缺點:安全性不高,因為它被包含在頁面上進行發送,所以可以通過源檔案看見他的內容。儲存結構少,僅僅支援 string,integer,bool,array,arraylis t等簡單的資料結構。並且在其上只存放簡單的單值,若要存放多值,需要額外編碼。儲存量少,因為它被儲存在頁面本身,所以無法儲存較大的值。而且大的資料量會受到防火牆和代理的阻止。 注意: 使用了HiddenField之後,需要回傳到伺服器進行處理,應該使用Http Post方法而不是Http Get方法(通過URL請求訪問)3 Cookie:
利用場合為:儲存少量頁面中經常改動的資訊,典型利用場合為:為登陸過的網站儲存登陸使用者名稱,為使用者輸入提供方便 ,還有在一些使用者自訂項目上儲存使用者的個人化。
優點:不使用伺服器資源,實現簡單,可配置到期時間。
缺點:大小受到限制,一般瀏覽器支援的最大的Cookie 容量為4096位元組。用戶端使用者可能會配置為拒絕Cookie。安全性:儲存在用戶端的資訊可能會被惡意使用者修改或者擷取,所以不應該儲存敏感資訊。持久性:儲存期限受到用戶端的配置影響。
Cookie 通常用於 存取已知使用者自訂內容的個人化情況。在大多數此類情況中,Cookie 是作為“標識”而不是“身分識別驗證”,所以在 Cookie 中只存 儲使用者名稱、賬戶名或唯一使用者識別碼(例如 GUID)並使用它來訪問網站的使用者個人化結構是足夠的了。
4 QueryString:
利用場合為: 將資訊從一頁傳遞給另一頁的最簡單的方法。
優點:不使用伺服器資源,支援廣泛,實現簡單
缺點:安全性,因為直接在URL中暴露給使用者 ,所以有被篡改的風險。容量有限,一般的瀏覽器都有255個字元的限制。只有在通過其 URL 請求頁時查詢字串才是可行的選擇。不能從已提交給伺服器的頁讀取 查詢字串。
檢視狀態:需要為將回傳到自身的頁儲存少量資訊。ViewState 屬性的使用將提供具有基本安全性的功能。 (www.3lian.com)
隱藏欄位:需要為將回傳到自身或另一頁的頁儲存少量資訊,並且不需要較高的安全性。 (用戶端事件)只能在提交到伺服器的頁上使用隱藏欄位。
Cookie:需要在用戶端儲存少量資訊並且不需要較高的安全性。(個人化)