您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)ASP.NET中有哪些狀態(tài)類型,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
我們可以在Global.asax的Application_Start函數(shù)中存儲數(shù)據(jù):
void Application_Start(object src, EventArgs e) { int exp = 0; // population of dataset from ADO.NET query not shown // Cache DataSet reference Application["Experiment"] = exp; } 現(xiàn)在你可以在任意頁面下使用它: private void Page_Load(object src, EventArgs e) { int expr = Int32.Parse((Application["Experiment"])); }
于Application狀態(tài)對于所有客戶都是共享的,如果客戶只是讀取該數(shù)據(jù),則沒有什么問題,一旦要進行寫操作,就不能保證線程的安全以及出現(xiàn)同步爭用的問題。我們可以使用HttpApplicationStateLock類,它派生于ReadWriteObjectLock類,它提供了讀/寫鎖的兩種屬性。在ASP.NET下,隱式地調(diào)用了AcquireWrite()和AcquireRead()方法以保證避免上面的問題。當然,我們也可以顯示地使用Lock()和Unlock():
private void Page_Load(object sender, System.EventArgs e) { Application.Lock(); int expr = Int32.Parse((Application["Experiment"])); if (expr>=something) { //do something } Else { //do something else } Application.UnLock(); //Some other thing goes here }
session,cookie,view狀態(tài)都是用來保存客戶端信息的ASP.NET狀態(tài)類型。它們之間又有什么區(qū)別呢?
Session狀態(tài)是在客戶登錄的時候創(chuàng)建的,它保存了客戶特定的信息,并以Session ID來標識。當一個新客戶訪問應(yīng)用程序時,先生成一個新的Session ID(或是Session Key),并為同一個客戶接下來的請求創(chuàng)建聯(lián)系。你可以在Session State中存儲任意類型的數(shù)據(jù),作為你的應(yīng)用,狀態(tài)被同一個進程和AppDomain(App域)維護。Session State的特點是為每一個特定的客戶創(chuàng)建狀態(tài)以維護客戶的信息,這些狀態(tài)信息存儲在服務(wù)器端的默認的會話狀態(tài)配置中。
Session(“Value”) = expr ; // Storing the data into session object SomeFunction() { int expr = Int32.Parse(Session(“Value”));//Accessing from it if (expr>=something) { //do something } Else { //do something else } //Some other thing goes here }
既然Session State針對特定的客戶建立,通過它來識別客戶的請求。ASP.NET提供了一種加密機制和編碼算法生成自己的Session Key。這是非常必要的,因為知道了你的Session Key,就有權(quán)限訪問指定的頁面了。
在ASP.NET中生成Session Key的方法:
byte[] sessionkey = new byte[15]; //Generates a random number RNGCryptoServiceProvider rngkey = new RNGCryptoServiceProvider (); rngkey.GetBytes (sessionkey); string clientsessionKey = SessionId.Encode (sessionkey);
但是Session和客戶端的Cookie是有關(guān)的,當客戶關(guān)掉Cookie時,Session就失效了。不過在ASP.NET中可以在web.config中修改設(shè)置,使Session的傳遞脫離Cookie。方法是:
<configuration> <system.web> <sessionState cookieless="true" /> </system.web> </configuration>
對于Cookie大家并不陌生,每個Cookie存儲了多個名/值對,我們可以通過HttpCookie類的值集合來訪問它,也可以間接地通過類所提供的索引器訪問。Cookie在ASP.NET下的使用:
protected void Page_Load(Object sender, EventArgs E) { int expr = 0; if (Request.Cookies["Expr"] == null) { // "Expr" cookie not set, set with this response HttpCookie cokExpr = new HttpCookie("Expr"); cokExpr.Value = exprTextBox.Text; Response.Cookies.Add(cokExpr); expr = Convert.ToInt32(exprTextBox.Text); } else { // use existing cookie value... expr = Convert.ToInt32(Request.Cookies["Expr"].Value); } // use expr to customize page }
由于Cookie存儲的信息是放到客戶端的,用戶在訪問服務(wù)器端頁面時,必然在客戶端和服務(wù)器端之間頻繁交換信息,影響了程序的性能。而Session由于存儲在服務(wù)器內(nèi)存中,因此不存在這個問題。不過,Session存儲的信息是臨時的,用戶一旦關(guān)閉瀏覽器,狀態(tài)即失去,而Cookie則相反。
以上就是ASP.NET中有哪些狀態(tài)類型,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。