ASP.NET保存信息總結(Application、Session、Cookie、ViewState和Cache等)

如下是關於ASP.NET中保存各類信息的對象的比較,理解這些對象的原理,對製做完善的程序來講是至關有必要的(摘至互聯網,並不是原創--xukunping)程序員

在ASP.NET中,有不少種保存信息的對象.例如:APPlication,Session,Cookie,ViewState和Cache等,那麼它們有什麼區別呢?每一種對象應用的環境是什麼?
    爲了更清楚的瞭解,咱們總結出每一種對象應用的具體環境,以下表所示:瀏覽器

方法 信息量大小 保存時間 應用範圍 保存位置
Application 任意大小 整個應用程序的生命期 全部用戶 服務器端
Session 小量,簡單的數據

用戶活動時間+一段延遲時間(通常
爲20分鐘)安全

單個用戶 服務器端
Cookie 小量,簡單的數據 能夠根據須要設定 單個用戶 客戶端
Viewstate 小量,簡單的數據 一個Web頁面的生命期 單個用戶 客戶端
Cache 任意大小 能夠根據須要設定 全部用戶 服務器端
隱藏域 小量,簡單的數據 一個Web頁面的生命期 單個用戶 客戶端
查詢字符串 小量,簡單的數據 直到下次頁面跳轉請求 單個用戶 客戶端
Web.Config文件 不變或極少改變的小量數據 直到配置文件被更新 單個用戶 服務器端

     1.Application對象 
    Application用於保存全部用戶的公共的數據信息,若是使用Application對象,一個須要考慮的問題是任何寫操做都要在 Application_OnStart事件(global.asax)中完成.儘管使用Application.Lock和 Applicaiton.Unlock方法來避免寫操做的同步,可是它串行化了對Application對象的請求,當網站訪問量大的時候會產生嚴重的性 能瓶頸.所以最好不要用此對象保存大的數據集合. 
       2.Session對象
    Session用於保存每一個用戶的專用信息.她的生存期是用戶持續請求時間再加上一段時間(通常是20分鐘左右).S
ession中的信息保存在Web服務器內容中,保存的數據量可大可小.當Session超時或被關閉時將自動釋放保存的數據信息.因爲用戶中止使用應用 程序後它仍然在內存中保持一段時間,所以使用Session對象使保存用戶數據的方法效率很低.對於小量的數據,使用Session對象保存仍是一個不錯 的選擇.使用Session對象保存信息的代碼以下:服務器

 

//存放信息
Session["username"]="zhouhuan";
//讀取數據
string UserName=Session["username"].ToString();

    3.Cookie對象
    Cookie用於保存客戶瀏覽器請求服務器頁面的請求信息,程序員也能夠用它存放非敏感性的用戶信息,信息保存的時間能夠根據須要設置.若是沒有設置 Cookie失效日期,它們僅保存到關閉瀏覽器程序爲止.若是將Cookie對象的Expires屬性設置爲Minvalue,則表示Cookie永遠不 會過時.Cookie存儲的數據量很受限制,大多數瀏覽器支持最大容量爲4096,所以不要用來保存數據集及其餘大量數據.因爲並不是全部的瀏覽器都支持 Cookie,而且數據信息是以明文文本的形式保存在客戶端的計算機中,所以最好不要保存敏感的,未加密的數據,不然會影響網站的安全性.使用 Cookie對象保存的代碼以下:網站

//存放信息
Response.Cookies["UserID"].Value="0001";
//讀取信息
string UserID=Response.Cookies["UserID"].Value;

    4.ViewState對象
    ViewState 經常使用於保存單個用戶的狀態信息,有效期等於頁面的生存期。ViewState容器能夠保持大量的數據,可是必須謹慎使用,由於過多使用會影響應用程序的性 能。全部Web服務器控件都使用ViewState在頁面回發期音保存本身的狀態信息。若是某個控件不須要在回發期間保存狀態信息,最好關閉該對象的 ViewState,避免沒必要要的資源浪費。經過給@Page指令添加「EnableViewState=false」屬性能夠禁止整個頁面的 ViewState。使用ViewState對象保存信息的代碼以下。加密

  //存放信息
   ViewState["nameID"]="0001";
  //讀取信息
   string NameID=ViewState["nameID"].ToString();

5.Cache對象
    Cache對象用於在HTTP請求間保存頁面或數據。該對象的使用能夠極大地提升整個應用程序的效率。它容許將頻繁訪問的大量服務器資源存儲在內存 中,當用戶發出相同的請求後服務器再也不次處理而是將Cache中保存的信息返回給用戶,節省了服務器處理請求的時間。此對象的實例是每一個應用程序專用的, 其生存期依賴於該應用程序的生存期。當從新啓動應用程序時,將從新建立其Cache對象的實例。使用Cache對象保存信息的代碼以下。spa

  //存放信息
   Cache["nameID"]="0001";
  //存放信息
   Cache.Insert("nameID","0001"1);
  //讀取信息
  string NameID=Cache["nameID"].ToString();

   6.隱藏域
Hidden控件是屬於HTML類型的服務器控件,使用此控件能夠實現隱藏域的功能。其實此控件和其它服務器控件的使用沒有太大區別,只是它不會在用戶端 的瀏覽器中顯示,始終處於隱藏狀態。可是每次頁面提交的時候,此控件和其它服務器控件一同提交到服務器端,所以在服務器端可使用Value屬性獲取或保 存一些數據信息。使用Hidden控件保存信息的代碼以下。對象

  //存放信息
  Hidden.Value="0001";
  //獲取信息
  string NameID=Hidden.Value;

7.查詢字符串
查詢字符串的方式是將要傳遞的值鏈接在URL後面,而後經過Response.Redirect方法實現客戶端的重定向。這種方式能夠實如今兩個頁面之間傳遞信息。因爲URL的長度有必定的限制,所以不能傳遞太大的信息,加外安全性也不是很好。
傳遞信息以下。事件

   Response.Redirect("List.aspx?nameID=0001&gradeID=002");
  //執行上面的語句後在IE地址欄顯示的URL的代碼以下。
   http://localhost/List.aspx?nameID=0001&grade=002
  //當跳轉到List.aspx後,能夠經過如下代碼得到所傳遞的信息。
  string NameID.GradeID;
   NameID=Request.Params["nameID"];
   GradeID=Request.Params["gradeID"];

      除了以上介紹的幾種對象外,還可使用Context對象和Web.Config配置文件。內存

相關文章
相關標籤/搜索