一、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個cookie。 htm
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大小超過限制都被忽略,且永遠不會被設置。