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、程式碼:
- 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