狀態管理是您對同一頁或不同頁的多個請求維護狀態和頁資訊的過程。與所有基於 HTTP 的技術一樣,Web Form頁是無狀態的,這意味著它們不自動指示序列中的請求是否全部來自相同的用戶端,或者單個瀏覽器執行個體是否一直在查看頁或網站。此外,到伺服器的每一往返過程都將銷毀並重新建立頁;因此,如果超出了單個頁的生命週期,頁資訊將不存在。
ASP.NET 提供多種方式來在伺服器往返過程之間維護狀態。對這些狀態管理選項的選擇主要取決於您的應用程式,並且應基於以下條件:
需要儲存的資訊量有多大?
用戶端是接受持久性的還是記憶體中的 Cookie?
要將資訊儲存在用戶端還是伺服器上?
資訊是否是敏感資訊?
您對應用程式設定了什麼樣的效能和頻寬條件?
目標瀏覽器和裝置具有什麼樣的功能?
您是否需要儲存基於使用者的資訊?
資訊需要儲存多長時間?
您使用 Web 場(多個伺服器)、Web 園(一個電腦上的多個進程)還是單個進程來運行應用程式?
用戶端狀態管理
檢視狀態
Web Form頁提供 ViewState 屬性作為內建結構,在對同一頁的多個請求間自動保留值。檢視狀態作為頁中的隱藏欄位來進行維護。
可以使用檢視狀態在頁回傳到自身時跨越往返過程儲存您自己的頁特定值。例如,如果您的應用程式正在維護使用者特定的資訊(即,該資訊在頁上使用,但不是任何控制項所必需的部分),則可以使用檢視狀態儲存該資訊。
使用檢視狀態的優點
不需要任何伺服器資源 檢視狀態包含在頁代碼內的結構中。
實現簡單 檢視狀態無需使用任何自訂編程。預設情況下對控制項啟用狀態資料的維護。
增強安全功能 檢視狀態中的值經過雜湊計算和壓縮,並且針對 Unicode 實現進行編碼,其安全性要高於使用隱藏欄位。
使用檢視狀態的缺點
效能注意事項 由於檢視狀態儲存在頁本身,因此如果儲存較大的值,使用者顯示頁和發送頁時的速度可能會減慢。尤其是對行動裝置,其頻寬通常是有限的。
裝置限制 行動裝置可能沒有足夠的記憶體容量來儲存大量的檢視狀態資料。
潛在的安全風險 檢視狀態儲存在頁上的一個或多個隱藏欄位中。雖然檢視狀態以雜湊格式儲存資料,但它可以被篡改。如果直接查看頁輸出源,可以看到隱藏欄位中的資訊,這導致潛在的安全性問題。