詳解ASP.NET狀態管理方式優缺點

 

 

  一般而言,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

  if (Request.Cookies["UserId"!= null
  lbMessage.text 
= "Dear" + Request.Cookies["UserId"].Value + ", Welcome to 
  our website!"
  else 
  lbMessage.text 
= "Guest,welcome to our website!"

  2.設置Cookie

  Response.Cookies["UserId"].Value=username; 

  優點:
  使用簡單

  缺點:
  1.客戶端可以禁用Cookie
  2.Cookie在每次請求或發送時都會被加載,影響傳輸。
  3.易被攻破,所有不適合存儲安全信息。

  二 Hidden fields(隱藏控件)

  Hidden field是在頁面級保存信息。與其他用戶標準控件的區別是,Hidden Field不被呈現在頁面中。當頁面提交的時候,Hidden Field中的值將被一同發送給服務端。雖有在ASP.NET 2.0中,我們可以使用ViewState來代替,但Hidden Fields依然可以用來存放一些不關鍵信息。

  protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1; 
  
//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.

  // Add item to ViewState 
  ViewState["myviewstate"= myValue; 
  
//Reading items from ViewState 
  Response.Write(ViewState["myviewstate"]); 

  優點:
  操作簡單
  被加密
  可以在控件級別使用

  缺點:
  加密編碼增加了頁面的大小
  增價了網絡傳輸

  四 Query strings

  Query String常用於頁面傳值。很多瀏覽器都會有長度限制,一般在255個字節。值得注意的是,儘量使用Server.UrlEncode,來避免一些意外情況,如Sql注入。

  string productid;productid=Request.Params["productid"

 

 服務端

  一 Application

  Application在整個應用程序都是可見的,所有用戶分享同一個Application.在ASP中,常用來存放鏈接字符串。

  Application.Lock(); Application["mydata"]="mydata"
  Application.UnLock(); 

  二 Session

  Session爲每個用戶單獨存儲用戶信息。Session有三種存放方式。"inproc" , "sqlserver" , "stateserver.
  InProc,數據保存在服務端進程中。由於目前有600M的內存限制,可以導致進程重啓,而失去所有的狀態信息。
  SqlServer,存放與數據庫之中,用戶狀態可以永久保留。
  StateServer,存放與另一臺狀態服務器中。

本文轉自:http://dotnet.chinaitlab.com/ASPNET/732267.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章