1. 程式人生 > >Asp.net中Application Session Cookie ViewState Cache Hidden 區別

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