在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、代碼:
- 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"] = "test";//寫
- string ID = ViewState["ID"].ToString();//讀
Cache
1、Cache用於在Http請求期間儲存頁面或者資料;
2、Cache的使用可以大大的提高整個應用程式的效率;
3、它允許將頻繁訪問的伺服器資源儲存在記憶體中,當使用者發出相同的請求後,伺服器不是再次處理而是將Cache中儲存的資料直接返回給使用者;
4、可以看出Cache節省的是時間(伺服器處理時間);
5、Cache執行個體是每一個應用程式專有的,其生命週期==該應用程式周期,應用程式重啟將重新建立其執行個體;
6、注意:如果要使用緩衝的清理、到期管理、依賴項等功能必須使用Insert 或者Add方法方法添加資訊;
7、代碼:
- Cache["ID"] = "test"; 或者 Cache.Insert("ID","test");//寫
- string ID = Cache["ID"].ToString();//讀
Hidden
1、Hidden控制項屬於html類型的伺服器控制項,始終處於隱藏狀態;
2、每一次提交的時候它會和其他伺服器控制項一起提交到伺服器端;
3、代碼:
- Hidden.Value = "king";//寫
- string id = Hidden.Value; 要使用Runat=server//讀
查詢字串
1、查詢字串的方式是將要傳遞的值串連在URL後面;
2、一般用於頁面之間傳遞資訊;
3、由於URL的長度有一定的限制,因此不能傳遞太大的資訊;
4、安全性不是很好。
5、代碼:
- Response.Redirect("List.aspx?id=123&name=abc");//傳值頁面
- 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