最近在網上搜羅了 ASP.NET WEB 狀態管理方面的一些內容,終於把這些內容整合總結了一下。
1. 希望自己通過整理,能夠掌握一些,為自己投資。
2. 以便自己忘記,又要浪費時間搜羅。
3. 希望對園友有幫助,這是一件很開心的事情
4. 希望大俠們看到問題及時幫忙指正,不想誤導自己,更不想誤導園友,在下不勝感激
不再磨嘰,馬上上菜
名稱 |
用戶 |
生存時間 |
數據 |
位置 |
優勢 |
劣勢 |
建議 |
Application |
所有用戶 |
應用程序重新啟動 |
沒有限制,只被存儲一次 |
服務器,可以存儲在數據庫 |
1. 實現簡單 2. 整個應用程序作用域(公用) |
1. 整個應用程序作用域的范圍導致沒有與私人空間 2. 服務器掛掉、升級以及關閉可能會導致數據丟失或被破壞 3. 需要占用服務器內存 |
存儲多用戶使用但不經常改變且不考慮安全性的全局信息 |
Cookie |
當前用戶 |
一般很短,但是只要用戶不刪除,可以是數月甚至數年 |
少量且經常改變的數據 |
客戶端 |
1. 存儲時間可配置 2. 無需服務器資源 3. 簡單 4. 數據持久化 |
1. 數據大小受限 2. 用戶可禁用 3. 潛在安全隱患 |
需要在客戶端且不需要考慮安全性的少量數據 |
QueryString |
一個或一組用戶 |
為下一個請求 (可以跨多個請求重復使用) |
很小,簡單數據 |
客戶端 |
1. 無需服務器資源 2. 被廣泛支持 3. 實現簡單 |
1. 潛在安全隱患 2. 能力有限(被URL長度限制) |
通過鏈接,從一個面發送到另一個頁面或者是相同頁面,且不需要考慮安全性的少量數據 |
Session |
當前用戶 |
只要用戶是在線的,以及在超時時間內(一般是20分鍾),支持自失效 |
沒有限制,但是應盡量小,因為每個用戶都有自己單獨session的存儲 |
服務器 |
1. 實現簡單 2. 可以使用會話管理事件 3. 數據持久化 4. 可在多計算機、多個進程之間使用 5. 彌補Cookie受限 6. 可以自定義和擴展Session |
1. 性能問題 |
需要考慮安全性,存儲特定的單獨會話的短期信息 |
Cache |
所有用戶或者用戶子集 |
根據實際需要可長可短 |
可很大、也可以很小、也可以很復雜 |
客戶端/服務器 |
1. 有ASP.NET管理 2. 當內存不足或者超時,將自動清除 3. 可配置 4. 減輕Web Service或者數據庫的負擔 5. 提高性能 6. 可靠性 |
1. 同步不及時 2. 擴展性問題 3. 維護成本 |
用戶經常訪問但不經常更新的數據 |
View State |
當前用戶 |
一個頁面 |
少量信息,隨着頁面的回發,數據將會在頁面來回發 |
客戶端,以隱藏域的形式存儲 |
1. 無需服務器資源 2. 實現簡單 3. 增強全性 |
1. 性能問題 2. 設備限制 3. 潛在安全隱患 |
存儲少量需要回發給自己的頁面信息 |
Control state |
當前用戶 |
一個頁面 |
少量信息,往返於服務器之間的控制使用的狀態信息 |
客戶端,默認以隱藏域的形式存儲 |
1. 無需服務器資源 2. 可靠 3. 通用 |
1. 特定程序依賴性 |
需要存儲少量信息往返於服務器之間的控制使用的狀態信息 |
Hidden Fields |
當前用戶 |
一個頁面 |
少量且經常被改變的數據 |
客戶端 |
1. 無需服務器資源 2. 被廣泛支持 3. 實現簡單 |
1. 潛在安全隱患 2. 存儲數據簡單 3. 性能問題 4. 存儲限制 |
需要發送到另一個頁面或者回發,且無需考慮安全性的少量頁面信息 |
Profile Properties |
當前用戶 |
配置文件更新 |
任何類型的數據 |
服務器 |
1. 數據持久化 2. 可在多計算機、多個進程之間使用 3. 可擴展性 |
1. 性能問題 2. 額外的配置要求 3. 維護數據 |
用戶session過期后需要持久化的信息,用戶下次訪問時需要恢復的信息 |
Database |
當前用戶 |
只要不被刪除 |
任何類型的數據 |
服務器 |
1. 安全性 2. 數據存儲量大 3. 數據持久化 4. 穩定性和數據完整性 5. 可訪問性 6. 被廣泛支持 |
1. 復雜性 2. 性能問題 |
存儲大量的信息,使用管理事務,或者整個應用程序生命周期都需要使用的信息,再次訪問時需要使用的信息。考慮數據挖掘,考慮安全性。 |
再次希望,如果有問題能及時幫忙指正,有問題請留言,有幫助就支持一下吧!