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