自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

概述ASP.NET狀態(tài)類型

開發(fā) 后端
本文詳細(xì)介紹四種ASP.NET狀態(tài)類型,一一介紹application,session,cookie,view狀態(tài)。

提供了四種ASP.NET狀態(tài)類型:application,session,cookie,view。

Application狀態(tài)為應(yīng)用程序提供了一個全局的狀態(tài)。所有客戶都可以使用該狀態(tài)。從設(shè)計的角度來說,我們通常用Application來存儲一些標(biāo)準(zhǔn)的數(shù)據(jù)。同時,我們在使用它時要注意避免性能的降低,存儲的數(shù)據(jù)盡可能提供給客戶只讀的功能。

我們可以使用HttpApplication類的Application屬性來訪問Application狀態(tài),它返回一個 HttpApplicationState類的實例。這個類是一個對象集合,可以存儲任何類型的數(shù)據(jù),并以鍵/值對的形式存儲。一旦數(shù)據(jù)被存儲到狀態(tài)后,就不會刪除,除非應(yīng)用程序重新啟動或者被終止或回收。

我們可以在Global.asax的Application_Start函數(shù)中存儲數(shù)據(jù):

  1. void Application_Start(object src, EventArgs e)  
  2. {  
  3. int exp = 0;  
  4. // population of dataset from ADO.NET query not shown  
  5. // Cache DataSet reference  
  6. Application["Experiment"] = exp;  
  7. }  
  8. 現(xiàn)在你可以在任意頁面下使用它:  
  9. private void Page_Load(object src, EventArgs e)  
  10. {  
  11. int expr = Int32.Parse((Application["Experiment"]));  

于Application狀態(tài)對于所有客戶都是共享的,如果客戶只是讀取該數(shù)據(jù),則沒有什么問題,一旦要進(jìn)行寫操作,就不能保證線程的安全以及出現(xiàn)同步爭用的問題。我們可以使用HttpApplicationStateLock類,它派生于ReadWriteObjectLock類,它提供了讀/寫鎖的兩種屬性。在ASP.NET下,隱式地調(diào)用了AcquireWrite()和AcquireRead()方法以保證避免上面的問題。當(dāng)然,我們也可以顯示地使用Lock()和Unlock():

  1. private void Page_Load(object sender, System.EventArgs e)  
  2. {  
  3. Application.Lock();  
  4. int expr = Int32.Parse((Application["Experiment"]));  
  5. if (expr>=something)  
  6. {  
  7. //do something  
  8.  }  
  9. Else  
  10. {  
  11. //do something else  
  12.  }  
  13. Application.UnLock();  
  14. //Some other thing goes here  


session,cookie,view狀態(tài)都是用來保存客戶端信息的ASP.NET狀態(tài)類型。它們之間又有什么區(qū)別呢?

Session狀態(tài)是在客戶登錄的時候創(chuàng)建的,它保存了客戶特定的信息,并以Session ID來標(biāo)識。當(dāng)一個新客戶訪問應(yīng)用程序時,先生成一個新的Session ID(或是Session Key),并為同一個客戶接下來的請求創(chuàng)建聯(lián)系。你可以在Session State中存儲任意類型的數(shù)據(jù),作為你的應(yīng)用,狀態(tài)被同一個進(jìn)程和AppDomain(App域)維護(hù)。Session State的特點是為每一個特定的客戶創(chuàng)建狀態(tài)以維護(hù)客戶的信息,這些狀態(tài)信息存儲在服務(wù)器端的默認(rèn)的會話狀態(tài)配置中。

  1. Session(“Value”) = expr ; // Storing the data into session object  
  2. SomeFunction()  
  3. {  
  4. int expr = Int32.Parse(Session(“Value”));//Accessing from it  
  5.  if (expr>=something)  
  6. {  
  7. //do something  
  8.  }  
  9. Else  
  10. {  
  11. //do something else  
  12.  }  
  13. //Some other thing goes here  

既然Session State針對特定的客戶建立,通過它來識別客戶的請求。ASP.NET提供了一種加密機(jī)制和編碼算法生成自己的Session Key。這是非常必要的,因為知道了你的Session Key,就有權(quán)限訪問指定的頁面了。

在ASP.NET中生成Session Key的方法:

  1. byte[] sessionkey = new byte[15];  
  2. //Generates a random number  
  3. RNGCryptoServiceProvider rngkey = new RNGCryptoServiceProvider ();  
  4. rngkey.GetBytes (sessionkey);  
  5. string clientsessionKey = SessionId.Encode (sessionkey); 


但是Session和客戶端的Cookie是有關(guān)的,當(dāng)客戶關(guān)掉Cookie時,Session就失效了。不過在ASP.NET中可以在web.config中修改設(shè)置,使Session的傳遞脫離Cookie。方法是:

  1. <configuration> 
  2. <system.web> 
  3. <sessionState cookieless="true" /> 
  4. </system.web> 
  5. </configuration> 

對于Cookie大家并不陌生,每個Cookie存儲了多個名/值對,我們可以通過HttpCookie類的值集合來訪問它,也可以間接地通過類所提供的索引器訪問。Cookie在ASP.NET下的使用:

  1. protected void Page_Load(Object sender, EventArgs E)  
  2. {  
  3. int expr = 0;  
  4. if (Request.Cookies["Expr"] == null)  
  5. {  
  6. // "Expr" cookie not set, set with this response  
  7.   HttpCookie cokExpr = new HttpCookie("Expr");  
  8. cokExpr.Value = exprTextBox.Text;  
  9. Response.Cookies.Add(cokExpr);  
  10. expr = Convert.ToInt32(exprTextBox.Text);  
  11. }  
  12. else  
  13. {  
  14. // use existing cookie value...  
  15.   expr = Convert.ToInt32(Request.Cookies["Expr"].Value);  
  16. }  
  17. // use expr to customize page  

由于Cookie存儲的信息是放到客戶端的,用戶在訪問服務(wù)器端頁面時,必然在客戶端和服務(wù)器端之間頻繁交換信息,影響了程序的性能。而Session由于存儲在服務(wù)器內(nèi)存中,因此不存在這個問題。不過,Session存儲的信息是臨時的,用戶一旦關(guān)閉瀏覽器,狀態(tài)即失去,而Cookie則相反。以上介紹ASP.NET狀態(tài)類型

【編輯推薦】

  1. ASP.NET調(diào)用WCF服務(wù)
  2. 淺析ASP.NET驗證控件
  3. ASP.NET中WCF服務(wù)與ASMX服務(wù)的兼容性
  4. 詳解ASP.NET應(yīng)用程序
  5. ASP.NET的HttpModule
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-07-28 17:17:19

ASP.NET概述

2009-07-22 17:45:35

ASP.NET教程

2009-07-27 15:52:21

ASP.NET特點ASP.NET概述

2009-07-29 13:04:59

2009-08-05 13:58:26

ASP.NET Mem

2009-07-22 16:17:39

ASP.NET AJA

2009-07-23 16:55:55

ASP.NET特點

2009-08-05 17:54:04

ASP.NET運行模式

2009-07-22 10:09:59

ASP.NET MVC

2009-07-30 15:17:16

ASP.NET 2.0

2009-07-20 10:16:13

配置ASP.NET A

2009-08-04 15:22:33

ASP.NET緩存機(jī)制

2009-08-04 16:46:58

ASP.NET內(nèi)置Ht

2009-07-22 15:58:52

ASP.NET AJA

2009-07-23 10:52:38

2009-07-30 14:55:43

ASP.NET 2.0

2009-08-05 16:59:38

ASP.NET調(diào)用Ex

2009-07-29 09:29:06

ASP.NET水晶報表

2009-07-28 16:03:23

ASP.NET狀態(tài)服務(wù)

2009-07-22 17:32:40

ASP.NET應(yīng)用程序
點贊
收藏

51CTO技術(shù)棧公眾號