Asp.net 中的狀態管理維護包含ViewState,cookie,session,application,cache五種方式,如下是它們的一些比較:數據庫
1.存在於客戶端仍是服務端瀏覽器
viewstate、cookie服務器
session、application、cachecookie
*session:在服務端的存儲方式包括4中,內存(最經常使用),ASP.NET State Service(Windows服務)、數據庫、自定義狀態提供程序session
2.有效時間app
只要頁面關閉,其狀態就失效網站
包括臨時cookie和永久cookie,臨時cookie存在於瀏覽器內存中,只要瀏覽器關閉則臨時cookie失效,永久cookie是在cookie對象上設置了失效時間,其保存在磁盤上,等過了失效時間即失效。cookie受客戶端瀏覽器控制,且瀏覽器可以存儲的cookie容量是有限的,所以當瀏覽器不支持cookie、人爲在瀏覽器刪除cookie或者瀏覽器cookie容量超出限制都會使cookie失效。.net
session的狀態有一個超時時間,當超過該時間後,session自動無效orm
這個狀態在服務器從新啓動以前都是有效的。對象
設置cache無效主要有兩種方式:一是設置失效時間,二是經過設置依賴項,當依賴項發生變化時,cache失效
3.可保存的數據格式
4.客戶端與服務端交互時的關係
客戶端與服務端的交互只能發送或操做當前頁面的視圖狀態
通常狀況下,每次用戶向服務端發送請求時會把當前站點的全部cookie發向服務端,但cookie容許設置路徑(HttpCookie類包含Domain和Path屬性),若是設置了具體的路徑,則只有訪問該路徑時,纔會把cookie發往服務端
客戶端訪問同一個站點下的不一樣資源,使用的是同一個session,服務端和客戶端一般經過cookie來進行關聯,即在客戶端保存sessionID,每次向服務端發起請求時都會同時把sessionID(在cookie中的主鍵名爲「ASP.NET_SessionId」)也一塊兒帶上,這樣服務端拿到sessionID後就能找到客戶端對應的session,因此session只跟站點和客戶端相關。
全部客戶端共享同一個application,它是全局的
全部客戶端共享同一個cache,它是全局的,但它有更多的控制權,如設置什麼時候失效
5.應用場景
viewstate:只存在ASP.NET WebForm中,如每一個服務器端控件都包含一個視圖狀態
cookie:一般用於存儲一些服務端相關信息的標識符,從而在cookie發往服務端後能夠找到其所對應的信息,也會用來保存帳戶密碼等相關信息
session:用於與指定的客戶端共同維護一個狀態,保存具體的狀態信息
application:保存全局的狀態信息,如該網站的訪問次數
cache:保存全局的狀態信息,且這些信息的失效時間能夠獲得更好的控制