一般而言,HTTP協議是非狀態服務,它不保存任何用戶請求信息。直至NetScape開始使用Cookies來保存用戶請求信息,Web應用程序有了極大的發展。現在ASP.NET程序員可以使用很多種方式來保存用戶請求信息。
下面主要介紹ASP.NET關於狀態管理的幾種方式。
客戶端
ASP.NET,提供了Cookies, QueryStrings (URL), Hidden fields, View State and Control state (ASP.NET 2.0),來管理客戶端請求。
一 Cookie
Cookie是以文本存儲於計算機中,使用name-value匹配。一般用戶存儲標識用戶信息,如:用戶名,用戶使用配置等。雖然Cookie可以被加密存儲,但不推薦在Cookie中保存用戶密碼。第二,Cookie的大小是限定的,所以不適合存儲大型數據。
Example:
1.獲取用戶ID
lbMessage.text = "Dear" + Request.Cookies["UserId"].Value + ", Welcome to
our website!";
else
lbMessage.text = "Guest,welcome to our website!";
2.設置Cookie
優點:
使用簡單
缺點:
1.客戶端可以禁用Cookie
2.Cookie在每次請求或發送時都會被加載,影響傳輸。
3.易被攻破,所有不適合存儲安全信息。
二 Hidden fields(隱藏控件)
Hidden field是在頁面級保存信息。與其他用戶標準控件的區別是,Hidden Field不被呈現在頁面中。當頁面提交的時候,Hidden Field中的值將被一同發送給服務端。雖有在ASP.NET 2.0中,我們可以使用ViewState來代替,但Hidden Fields依然可以用來存放一些不關鍵信息。
//to assign a value to Hidden field
Hidden1.Value="Create hidden fields";
//to retrieve a value
string str=Hidden1.Value;
優點:
1.使用簡單
2.可以存儲少量數據
缺點:
1.不安全,以明文的形式直接從網絡傳輸
三 View State(狀態視圖)
狀態視圖ViewSate,可以用來爲單獨用戶存儲信息。你可以通過設置EnableViewState屬性來控制ViewState的使用,在默認的情況下屬性值爲True.ViewSate在每次用戶請求或服務端響應時,都會被傳輸。所以,爲了減少網絡帶寬的使用,可以在不需要狀態視圖時設置EnableViewState屬性值爲False.ViewSate在頁面中的存儲是經過Base64轉碼的,增加了額外的數據量,所以一定要注意保存較少的ViewSate.
ViewState["myviewstate"] = myValue;
//Reading items from ViewState
Response.Write(ViewState["myviewstate"]);
優點:
操作簡單
被加密
可以在控件級別使用
缺點:
加密編碼增加了頁面的大小
增價了網絡傳輸
四 Query strings
Query String常用於頁面傳值。很多瀏覽器都會有長度限制,一般在255個字節。值得注意的是,儘量使用Server.UrlEncode,來避免一些意外情況,如Sql注入。
服務端
一 Application
Application在整個應用程序都是可見的,所有用戶分享同一個Application.在ASP中,常用來存放鏈接字符串。
Application.UnLock();
二 Session
Session爲每個用戶單獨存儲用戶信息。Session有三種存放方式。"inproc" , "sqlserver" , "stateserver.
InProc,數據保存在服務端進程中。由於目前有600M的內存限制,可以導致進程重啓,而失去所有的狀態信息。
SqlServer,存放與數據庫之中,用戶狀態可以永久保留。
StateServer,存放與另一臺狀態服務器中。
本文轉自:http://dotnet.chinaitlab.com/ASPNET/732267.html