溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ASP.NET的四種狀態(tài)分別是哪些

發(fā)布時間:2021-10-28 09:26:23 來源:億速云 閱讀:116 作者:柒染 欄目:編程語言

ASP.NET的四種狀態(tài)分別是哪些,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

這些狀態(tài)的原理對于做.NET開發(fā)非常重要。現(xiàn)在詳細(xì)解說一下。

視圖狀態(tài):視圖狀態(tài)就在大家身邊不知道大家是否注意。ASP.NET是基于服務(wù)其處理事件的。當(dāng)服務(wù)器處理完事件時,再返回本窗體時,如果沒有視圖狀態(tài),原來的數(shù)據(jù)將不會在有。這樣說也許會暈。舉個列子,比如有一個網(wǎng)站需要你注冊成為會員。當(dāng)你填完信息,(一般來說頁面會轉(zhuǎn)向別的地方)這里為了說明問題,我們讓他返回原來的頁面繼續(xù)操作,如果沒有視圖狀態(tài),則你以前填的數(shù)據(jù)都沒有了。如果有視圖狀態(tài),則原來的數(shù)據(jù)還在。試圖狀態(tài)在一些時候很有用。比如說分級驗(yàn)證時。

那么.NET是用什么方法保持試圖狀態(tài)呢?這里微軟采用了一種特殊的方法。在瀏覽器打開網(wǎng)頁的源代碼,你會發(fā)現(xiàn)一段你在編輯網(wǎng)頁時,沒有添加的一個HTML控件。

形式是這樣的:

<input type="hidden" name="_VIEWSTATE" id="_VIEWSTATE" value="一些加密過的值"/>

這是.NET自動給你添加的。它也是視圖狀態(tài)能夠?qū)崿F(xiàn)的功臣。因?yàn)檫@個空間是隱藏的,所以不會破壞頁面的布局??占械膙alue中的值就是就是各個空件以及控件中的數(shù)據(jù)(狀態(tài))。這些數(shù)據(jù)是經(jīng)過哈希函數(shù)加密過的。這是為了安全考慮。當(dāng)網(wǎng)頁提交時,瀏覽器首先將當(dāng)前網(wǎng)頁中的各種狀態(tài)(包括控件以及控件中的數(shù)據(jù))保存到這個HTML字段中。當(dāng)網(wǎng)頁再次返回瀏覽器時,在自動把這些狀態(tài)返回給網(wǎng)頁,這樣網(wǎng)頁也就恢復(fù)了狀態(tài)。

再來講講視圖狀態(tài)需要注意的問題。

視圖狀態(tài)只能在本網(wǎng)頁與服務(wù)器之間保持,不能在不同網(wǎng)頁之間連接時保持。默認(rèn)情況下,幾乎所有的ASP.NET控件都有保持視圖狀態(tài)的功能。

視圖狀態(tài)有很多優(yōu)點(diǎn),但同樣(世上每件事都具有兩面性,一個好的技術(shù)也不列外)有些缺點(diǎn)。首先是安全,雖然數(shù)據(jù)是經(jīng)過加密,但對于黑客中的骨灰級人物,還是很不安全的。再次,你可以想如果你的頁面包括幾百條記錄,頁面很復(fù)雜,這是必會影響網(wǎng)頁的加載速度。

應(yīng)用程序狀態(tài)(Application):Application對象是應(yīng)用程序的全局性對象。用于存放應(yīng)用程序的全局共享資源。他的本質(zhì)是HttpApplicationState類的一個實(shí)例。當(dāng)用戶***次反問某虛目錄中的資源時,就被創(chuàng)建。也就是說網(wǎng)站***次在互聯(lián)網(wǎng)上發(fā)布,這時有一個用戶剛好訪問你的虛擬目錄資源,那么Application對象就已經(jīng)建立。在資源與應(yīng)用程序之間建立了一個緩沖區(qū)。

應(yīng)用程序狀態(tài)只有在網(wǎng)站運(yùn)行時存在。當(dāng)應(yīng)用程序推出或服務(wù)器關(guān)閉時(更慘一點(diǎn)服務(wù)器崩潰了),應(yīng)用程序狀態(tài)中保存的數(shù)據(jù)機(jī)會丟失和損壞。所以對于需要***保留的資源還是在數(shù)據(jù)庫中持久化保存的好。

介紹一些Application對象的一些操作方法。

Application對象當(dāng)然是采用最經(jīng)典的“鍵-值”對的字典方法來定義。其中鍵為字符串代表Application對象的名稱。值可以是任何類型的數(shù)據(jù)。(例如HTML,CSS,SQL都可以)。舉個例子:

Application["source"]="special source";string message =Application["source"].ToString();在Application中添加刪除保存的對象。Application.Add("source",''special source");Application.remove("source");來一個狠一點(diǎn)的操作,把Application中的對象全部請出去。Application.Clear();或Appication.RemoveAll();信息共享自然會引來一個問題,資源的同步競爭。這類問題解決當(dāng)然要靠鎖了。Applicatin.Lock()//加鎖鎖定資源,不讓其他進(jìn)程訪問。functions(Application["source"]);//一些操作Application對象的操作。Application.UnLock();//解除鎖定。

會話狀態(tài)(Session):Session對象用來保存單個用戶的狀態(tài)。在網(wǎng)站中,每個新訪問的用戶都將產(chǎn)生自己的會話(Session)對象。這個Session對象是在服務(wù)器端進(jìn)行管理,只能為它所綁定的用戶服務(wù)。如果另一位用戶也訪問網(wǎng)站,他也經(jīng)擁有自己的Sesiion對象。兩個用戶的Session對象即使同名,也不能共享同一個Session對象。各是各的。

實(shí)際上Session對象是HttpSessionState類的實(shí)例。有很多屬性和方法,大家不妨去看看。這里不闡述了。

就一些例子吧。

Session["source"]="special source";string message =Session["source"].ToString();

應(yīng)用程序狀態(tài)在網(wǎng)站中總是可用的,這.NET Framework的內(nèi)部機(jī)制,我們不去管。我們來看看Session對象。由于在Machine.config配置文件中的Session設(shè)置是啟動的,因此不需要額外的步驟就能使用它。盡管如此我們還是要知道一些原理和本質(zhì)。Machine.config和應(yīng)用程序的Web.config中的設(shè)置決定了是啟動還是關(guān)閉Session對象。當(dāng)然如果想要延遲到需要時,在啟用也可以。我們可以在頁面一級設(shè)置。

//這條語句的作用是在這個頁面中不能使用會話狀態(tài)(Session)。

Session對象有一個Timeout屬性可以設(shè)置Session對象的生命周期。它以分鐘為單位,默認(rèn)是20分鐘。如果再有效時間內(nèi)沒有連接服務(wù)器,那么Session的所有設(shè)置都將失效。如果需要終止Session對象,可以用它的Abandon()方法。

差點(diǎn)忘了,Session有一點(diǎn)很重要,補(bǔ)充一下。

session中的關(guān)鍵字是不區(qū)分大小寫的。因此不要用大小寫來區(qū)分Session變量。也就是說Session["source"]與Session["SOURCE"]是一樣的。如果刪掉其中一個,會有意想不到的結(jié)果。

Cookie狀態(tài): Coolkie 狀態(tài)一是用來保存一個用戶資源的狀態(tài)。和Session不同的是它存儲在瀏覽器端。在Cookie中只能含有較少的信息,通常不超過4096個字節(jié)(有些較新的瀏覽器可以達(dá)到8192個i字節(jié)).在ASP.NET中,Session對象和Cookie對象現(xiàn)結(jié)合來識別用戶。每當(dāng)用戶開始連接站點(diǎn)時,系統(tǒng)將自動在內(nèi)存塊中創(chuàng)建一個和用戶有關(guān)的Session對象,同時創(chuàng)建一個Cookie對象來保存用戶ID并把它保存在瀏覽器端,與當(dāng)前的用戶***的聯(lián)系起來。這樣當(dāng)用戶下一次在訪問時,用戶被要求提交用戶的TD也就是CooKie,Cookie和Session相對照以正確的還原原來的會話狀態(tài)。這就是無狀態(tài)協(xié)議Http條件下保持用戶狀態(tài)的方法。

向?yàn)g覽器寫入Cookie的方法是這樣的。舉個例子:

HttpCookie cookie=new HttpCookie("userNameId");//創(chuàng)建一個Cookie對象,并且賦值。cookie.Value="userNameId"//如果已經(jīng)存在一Cookie,也可以這樣給它賦值。cookie.Expires=DateTime.Now+TimeSpan;//設(shè)定cookie的生命周期,這里的TimeSpan是TimeSpan類的一個實(shí)例。cookie的默認(rèn)時間是20分鐘。Response.Cookies.Add(cookie);//向?yàn)g覽器中寫入Cookie.HttpCookie cookie1=Request.Cookies["cookie"];//讀取Cookie.

關(guān)于ASP.NET的四種狀態(tài)分別是哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI