ASP.NET經常使用信息保持狀態學習筆記一

 一、ViewState:ViewState是ASP.NET中.aspx特有的,經過HTTP報文傳遞,全部服務器端控件的值都會自動保存在ViewState   中。而且ViewState只能保存:String、Int、Bool、Array、ArrayList、Hashtable類型數據。 html

   ViewState經過base64編碼後保存在頁面隱藏域中,頁面關閉時ViewState就銷燬。
   道理同隱藏域,只是.NET Framwork封裝了傳值取值過程而已。
   使用ViewState有一個前提:頁面必須有一個服務端窗體的標記<form runat="server">,服務器輸出時,同時將ViewState的值添加到表單的隱藏域中。頁面請求時,同時也將頁面的__ViewState隱藏域提交,服務器在接收到請求時,自動在報文中尋找__ViewState的隱藏域,若是有存在的話,則自動將它的值解碼後賦值給頁面的ViewState屬性中。
   缺點:加大網站數據流量、下降速度;只適合於在同一個頁面不關閉的狀況下屢次與服務器之間的交互。  瀏覽器

  
  二、Cookie:cookie數據保存在瀏覽器客戶端(通常爲4KB),也是經過HTTP報文傳遞。 服務器

     cookie保存兩種方式 Ⅰ、保存在瀏覽器內存中,不關閉瀏覽器狀況下訪問任何頁面均可以獲得。 cookie

                                      Ⅱ、保存到硬盤中(設置Expires(只寫)的時間,若是設置時間爲負數時再返回給瀏覽器,cookie會被清除。)                                cook.Expires=Datetime.Now.AddDays(-1)。 工具

 

   無論客戶端瀏覽器請求任何數據,報文都會帶有cookie。
   清空全部Cookie時,謹防使用如下循環刪除,否則可能出現死循環。(具體緣由:在獲取Request.Cookies的時候FrameWork會自動引用Respone.Cookies;具體實現可使用反編譯工具查看...)
    HttpCookieCollection hcc=Request.Cookies;
    for(int i=0;i<hcc.Count;i++)
    { HttpCookie cook =hcc[i];
      cook.Expries=DtaeTime.NOW.Adds(-1);
      Respone.Cookie.Add(cook);
    }
    可使用反向循環的方法刪除。
    for(int i=hcc.Count;i>0;i--){..} 網站

 

注:Cookie大小限制(轉) 編碼

源文:http://www.cnblogs.com/tedyding/archive/2010/03/20/1690690.html orm

1、瀏覽器容許每一個域名所包含的cookie數: server

  Microsoft指出InternetExplorer8增長cookie限制爲每一個域名50個,但IE7彷佛也容許每一個域名50個cookiehtm

  Firefox每一個域名cookie限制爲50個。

  Opera每一個域名cookie限制爲30個。

  Safari/WebKit貌似沒有cookie限制。可是若是cookie不少,則會使header大小超過服務器的處理的限制,會致使錯誤發生。

  注:「每一個域名cookie限制爲20個」將再也不正確!

2、當不少的cookie被設置,瀏覽器如何去響應。

  除Safari(能夠設置所有cookie,無論數量多少),有兩個方法:

  最少最近使用(leastrecentlyused(LRU))的方法:當Cookie已達到限額,自動踢除最老的Cookie,以使給最新的Cookie一些空間。InternetExplorer和Opera使用此方法。

  Firefox很獨特:雖然最後的設置的Cookie始終保留,但彷佛隨機決定哪些cookie被保留。彷佛沒有任何計劃(建議:在Firefox中不要超過Cookie限制)。

3、不一樣瀏覽器間cookie大小也不一樣:

  Firefox和Safari容許cookie多達4097個字節,包括名(name)、值(value)和等號。

  Opera容許cookie多達4096個字節,包括:名(name)、值(value)和等號。

  InternetExplorer容許cookie多達4095個字節,包括:名(name)、值(value)和等號。

注:多字節字符計算爲兩個字節。在全部瀏覽器中,任何cookie大小超過限制都被忽略,且永遠不會被設置。

相關文章
相關標籤/搜索