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