Asp.net中Application Session Cookie ViewState Cache Hidden 區別

在ASP.NET中,有很多種保存信息的對象。例如:Application,Session,Cookie,ViewState和Cache等,那麼它們有什麼區別呢?每一種對象應用的環境是什麼?

爲了更清楚的瞭解,我們總結出每一種對象應用的具體環境,如下表所示:

方法 信息量大小 保存時間 應用範圍 保存位置
Application 任意大小 整個應用程序的生命期 所有用戶 服務器端
Session 小量、簡單的數據 用戶活動時間+一段延遲時間(一般爲20分鐘) 單個用戶 服務器端
Cookie 小量、簡單的數據 可以根據需要設定 單個用戶 客戶端
Viewstate 小量、簡單的數據 一個Web頁面的生命期 單個用戶 客戶端
Cache 任意大小 可以根據需要設定 所有用戶 服務器端
隱藏域 小量、簡單的數據 一個Web頁面的生命期 單個用戶 客戶端
查詢字符串 小量、簡單的數據 直到下次頁面跳轉請求 單個用戶 客戶端
Web.Config文件 不變或極少改變的小量數據 直到配置文件被更新 單個用戶 服務器端

Application

1、Application用來保存所有用戶共用的信息;

2、在Asp時代,如果要保存的數據在應用程序生存期內不會或者很少發生改變,那麼使用Application是理想的選擇。但是在Asp.net開發環境中我們把類似的配置數據放在Web.config中;

3、如果要使用Application要注意的是所有的寫操作都要在Application_OnStart事件中完成 (global.Asax),儘管可以使用Application.Lock()避免了衝突,但是它串行化了對Application的請求,會產生嚴重 的性能瓶頸;

4、不要使用Application保存大數據量信息;

5、代碼:

  1. Application["UserID"] = "test";//寫 
  2. string UserName = Application["UserID"].ToString();//讀 

Session
1、Session用來保存每一個用戶的專有信息;
2、Session的生存期是用戶持續請求時間加上一段時間(一般是20分鐘左右);
3、Session信息是保存在Web服務器內存中的,保存數據量可大可小;
4、Session超時或者被關閉將自動釋放數據信息;
5、由於用戶停止使用應用程序之後它仍在內存中存留一段時間,因此這種方法效率較低;
6、代碼:

  1. Session["UserID"] = "test";//寫 
  2. string UserName = Session["UserID"].ToString();//讀 

Cookie
1、Cookie用來保存客戶瀏覽器請求服務器頁面的請求信息;
2、我們可以存放非敏感的用戶信息,保存時間可以根據需要設置;
3、如果沒有設置Cookie失效日期,它的生命週期保存到關閉瀏覽器爲止;
4、Cookie對象的Expires屬性設置爲MinValue表示永不過期;
5、Cookie存儲的數據量受限制,大多數的瀏覽器爲4K因此不要存放大數據;
6、由於並非所有的瀏覽器都支持Cookie,數據將以明文的形式保存在客戶端;
7、代碼:

  1. Resopnse.Cookies["UserID"] = "test";//寫 
  2. string UserName = Resopnse.Cookies["UserID"].ToString();//讀 

ViewState
1、ViewState用來保存用戶的狀態信息,有效期等於頁面的生命週期;
2、可以保存大量數據但是要慎用,因爲會影響程序性能;
3、所有的Web服務器控件都是用ViewState在頁面PostBack期間保存狀態;
4、不需要則關閉 @page 裏面設置EnableViewState=false;
5、代碼:

  1. ViewState["ID"] = "test";//寫 
  2. string ID = ViewState["ID"].ToString();//讀 

Cache
1、Cache用於在Http請求期間保存頁面或者數據;
2、Cache的使用可以大大的提高整個應用程序的效率;
3、它允許將頻繁訪問的服務器資源存儲在內存中,當用戶發出相同的請求後,服務器不是再次處理而是將Cache中保存的數據直接返回給用戶;
4、可以看出Cache節省的是時間(服務器處理時間);
5、Cache實例是每一個應用程序專有的,其生命週期==該應用程序週期,應用程序重啓將重新創建其實例;
6、注意:如果要使用緩存的清理、到期管理、依賴項等功能必須使用Insert 或者Add方法方法添加信息;
7、代碼:

  1. Cache["ID"] = "test"; 或者 Cache.Insert("ID","test");//寫 
  2. string ID = Cache["ID"].ToString();//讀 

Hidden
1、Hidden控件屬於html類型的服務器控件,始終處於隱藏狀態;
2、每一次提交的時候它會和其他服務器控件一起提交到服務器端;
3、代碼:

  1. Hidden.Value = "king";//寫 
  2. string id = Hidden.Value; 要使用Runat=server//讀 

查詢字符串
1、查詢字符串的方式是將要傳遞的值連接在URL後面;
2、一般用於頁面之間傳遞信息;
3、由於URL的長度有一定的限制,因此不能傳遞太大的信息;
4、安全性不是很好。
5、代碼:

  1. Response.Redirect("List.aspx?id=123&name=abc");//傳值頁面 
  2. string name = Request.QueryString["name"]; string id = Request.QueryString["id"];//取值頁面 

Application

1.         Application用來保存所有用戶共用的信息

2.         Asp時代,如果要保存的數據在應用程序生存期內不會或者很少發生改變,那麼使用Application是理想的選擇。但是在Asp.net開發環境中我們把類似的配置數據放在Web.config中。

3.         如果要使用Application 要注意的是所有的寫操作都要在Application_OnStart事件中完成(global.Asax),儘管可以使用Application.Lock()避免了衝突,但是它串行化了對Application的請求,會產生嚴重的性能瓶頸。

4.         不要使用Application保存大數據量信息

5.         代碼:Application[“UserID”]=”test”;

        String UserName=Application[“UserID”].ToString();

Session

1.         Session用來保存每一個用戶的專有信息

2.         Session的生存期是用戶持續請求時間加上一段時間(一般是20分鐘左右)

3.         Session信息是保存在Web服務器內存中的,保存數據量可大可小

4.         Session超時或者被關閉將自動釋放數據信息

5.         由於用戶停止使用應用程序之後它仍在內存中存留一段時間,因此這種方法效率較低

6.         代碼:Session[“UserID”]=”test”;

        String UserName=Session[“UserID”].ToString();

Cookie

1.         Cookie用來保存客戶瀏覽器請求服務器頁面的請求信息

2.         我們可以存放非敏感的用戶信息,保存時間可以根據需要設置

3.         如果沒有設置Cookie失效日期,它的生命週期保存到關閉瀏覽器爲止

4.         Cookie對象的Expires屬性設置爲MinValue表示永不過期

5.         Cookie存儲的數據量受限制,大多數的瀏覽器爲4K因此不要存放大數據

6.         由於並非所有的瀏覽器都支持Cookie,數據將以明文的形式保存在客戶端

7.         代碼:Resopnse.Cookies[“UserID”]=”test”;

        String UserName= Resopnse.Cookies [“UserID”].ToString();

ViewState

1.         ViewState用來保存用戶的狀態信息,有效期等於頁面的生命週期

2.         可以保存大量數據但是要慎用,因爲會影響程序性能

3.         所有的Web服務器控件都是用ViewState在頁面PostBack期間保存狀態

4.         不需要則關閉 @page 裏面設置EnableViewState=false

5.         代碼:ViewState[‘”ID”]=”yiner”;
   String ID =ViewState[“ID”].ToString();

Cache

1.         Cache用於在Http請求期間保存頁面或者數據

2.         Cache的使用可以大大的提高整個應用程序的效率

3.         它允許將頻繁訪問的服務器資源存儲在內存中,當用戶發出相同的請求後
服務器不是再次處理而是將Cache中保存的數據直接返回給用戶

4.         可以看出Cache節省的是時間服務器處理時間

5.         Cache實例是每一個應用程序專有的,其生命週期==該應用程序週期
應用程序重啓將重新創建其實例

6.         注意:如果要使用緩存的清理、到期管理、依賴項等功能必須使用Insert 或者Add方法方法添加信息

7.         代碼:Cache[‘”ID”]=”yiner”;或者Cache.Insert(“ID”,”test”);
   String ID =Cache[“ID”].ToString();

Hidden

1.         Hidden控件屬於Html類型的服務器控件,始終處於隱藏狀態

2.         每一次提交的時候它會和其他服務器控件一起提交到服務器端

3.         代碼如下:Hidden.Value=”king”;
string id=Hidden.Value; 要使用Runat=server

 

附一:

Application_start: 第一個訪問網站的用戶會觸發該方法. 通常會在該方法裏定義一些系統變量,如聊天室的在線總人數統計,歷史訪問人數統計的初始化等等均可在這裏定義.

Application_end:網站關閉,或重啓時,會觸發該方法. 沒有進行過多試驗.

Session_start : 每個用戶訪問網站的第一個頁面時觸發;

Session_end:使用了session.abandon(),或session超時用戶退出後均可觸發. 注意Session_end中不 能使用session對象,服務器對象, server.mappath().  所以只能用session.contents("username") 取代session("username"). 或者用Application對象或方法;

例如想在session_end中使用Server.MapPath("users.xml"), 則應在Application_start 中定義Application("xmlPath") = Server.MapPath("users.xml"),然後在session_end中調用Application("XmlPath"),而不能直 接在session_end中使用諸如:Server.MapPath("users.xml"),

他們的執行順序是:1:Application_start  2: session_start ; 3:session_end: 4 Application_end


發佈了9 篇原創文章 · 獲贊 4 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章