在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