国产毛片午夜福利,国产黄网,国产亚洲天堂,97国产精品

  •  
    ASP.NET中的狀態(tài)管理
    發(fā)布時間:2008-06-27   瀏覽次數(shù):1181297
    ASP.NET中的狀態(tài)管理 我們在ASP中能夠通過cookie、查詢字符串、應用程序、對話等輕易地解決這些問題,F(xiàn)在到了ASP.NET環(huán)境中,我們?nèi)匀豢梢允褂眠@些功能,只是它們的種類更多了,功能也更強大了。   管理互聯(lián)網(wǎng)網(wǎng)頁主要有二種不同的方法:客戶端和服務器端。 1、客戶端的狀態(tài)管理:   在客戶端、服務器之間的多次請求-應答期間,服務器上不保存信息,信息將被存儲在網(wǎng)頁或用戶的計算機上。   A、Cookie   cookie是存儲在客戶端文件系統(tǒng)的文本文件中或客戶端瀏覽器對話的內(nèi)存中的少量數(shù)據(jù),它主要用來跟蹤數(shù)據(jù)設置。下面我們舉例說明:假設我們要定制化一個歡迎互聯(lián)網(wǎng)網(wǎng)頁,當用戶請求缺省的互聯(lián)網(wǎng)網(wǎng)頁時,應用程序會首先檢查用戶在此前是否已經(jīng)注冊,我們可以從cookie中獲取用戶的信息: [c#]if (Request.Cookies[“username”]!=null)lbMessage.text=”Dear “+Request.Cookies[“username”].Value+”, Welcome shopping here!”;elselbMessage.text=”Welcome shopping here!”;   如果要存儲用戶的資料,我們可以使用下面的代碼: [c#]Response.Cookies[“username’].Value=username;    這樣,當用戶請求該網(wǎng)頁時,我們可以方便地識別該用戶。   B、隱藏域   隱藏域不會顯示在用戶的瀏覽器中,但我們可以象設置標準控制的屬性那樣設置其屬性。當一個網(wǎng)頁被提交給服務器時,隱藏域的內(nèi)容和其他控制的值一塊兒被送到HTTP Form集合中。隱藏域可以是任何存儲在網(wǎng)頁中的與網(wǎng)頁有關的信息的存儲庫,隱藏域在其value屬性中存儲一個變量,而且必須被顯性地添加在網(wǎng)頁上。   ASP.NET中的HtmlInputHidden控制提供了隱藏域的功能。 [c#]protected System.Web.UI.HtmlControls.HtmlInputHidden Hidden1;file://給隱藏域賦值Hidden1.Value=”this is a test”;file://獲得一個隱藏域的值string str=Hidden1.Value;   需要注意的是,要使用隱藏域,必須使用HTTP-Post方法提交互聯(lián)網(wǎng)網(wǎng)頁。盡管其名字是隱藏域,但它的值并不是隱藏的,我們可以通過“查看源代碼”功能找到它的值。   C、狀態(tài)查看   包括網(wǎng)頁本身在內(nèi)的Web Forms網(wǎng)頁上的每個控制都有一個名字為ViewState的屬性,它是一個自動保持網(wǎng)頁和控制狀態(tài)的內(nèi)置結構,這意味著在向服務器提交網(wǎng)頁后,我們無需采取任何措施來恢復控制的數(shù)據(jù)。在這里,對我們有用的是ViewState屬性,我們可以利用它來保存與服務器之間多次的請求-應答期間的信息。 [c#]file://保存信息ViewState.Add(“shape”,”circle”);file://獲取信息string shapes=ViewState[“shape”];   注意:與隱藏域不同的是,在使用查看源代碼功能時,ViewState屬性的值是不可見的,它們是被壓縮和加密的。   D、查詢字符串   查詢字符串提供了一種簡單而受限制的維護狀態(tài)信息的方法,我們可以方便地將信息從一個網(wǎng)頁傳遞給另一個網(wǎng)頁,但大多數(shù)瀏覽器和客戶端裝置都把URL的長度限制在255個字符長。此外,查詢值是通過URL傳遞給互聯(lián)網(wǎng)的,因此,在有些情況下,成了一個大問題。   帶有查詢字符串的URL如下所示:    http://www.examples.com/list.aspx?categoryid=1&;productid=101   當有客戶端請求list.aspx后,可以通過下面的代碼獲取目錄和產(chǎn)品信息: [c#]string categoryid, productid;categoryid=Request.Params[“categoryid”];productid=Request.Params[“productid”];   注意,我們只能使用HTTP-Get提交該互聯(lián)網(wǎng)網(wǎng)頁,否則不能從查詢字符串獲得需要的值! 2、服務器端的狀態(tài)管理   信息存儲在服務器上,盡管其性較高,但會占用較多的web服務器資源。 A、Aplication對象   Aplication對象提供了一種讓所有在Web應用服務器中運行的代碼訪問的存儲數(shù)據(jù)的機制,插入應用程序?qū)ο鬆顟B(tài)變量的數(shù)據(jù)應該能夠被多個對話共享,而且不會頻繁地改變。正是因為它能夠被全部應用程序所訪問,因此,我們需要使用Lock和UnLock對避免其中的值出現(xiàn)沖突。 [c#] Application.Lock(); Application[“mydata”]=”mydata”; Application.UnLock();   B、Session對象   Session對象可以用來存儲需要在服務器的多次請求-應答期間和對網(wǎng)頁的請求期間進行維護的指定對話的信息。Session對象是每個對話的存在的基礎,也是說不同的客戶端生成不同的Session對象。存儲在對話狀態(tài)變量中的數(shù)據(jù)存在的周期較短。   每個活動的ASP.NET對話是由一個包含合法的URL ASCII字符、長度為1位的SessionID字符串確定和跟蹤的。SessionID的值是由一個能夠保證性的算法生成的,以便對話之間不會沖突,SessionID的隨意性使得我們很難猜測出一介現(xiàn)有對話的ID。   根據(jù)應用程序的配置設置情況,SessionID通過HTTP cookie或修改后的URL在客戶端-服務器請求之間進行傳輸。那么,如何設置應用程序配置的對話裝備方法。   每個web應用程序必須有一個名字為web.config的配置文件,它是基于xml(標準化越來越近了)文件的。下面是一個名字為sessionState的對話:   cookieless選項的值為true或false。當其值為false(缺省值)時,ASP.NET將使用HTTP cookie來識別用戶;當其值是true時,ASP.NET將隨機地生成一個的號碼,并將它放在被請求的文件的前面,這一號碼是用來識別用戶的,我們能夠在IE的地址欄中看到它:   http://localhost/Management/(2yzakzez3eqxut45ukyzq3qp)/Default.aspx   OK,下面我們再回到session對象。 [c#]file://存儲信息Session[“myname”]=”Mike”;file://獲得信息myname=Session[“myname”];   C、數(shù)據(jù)庫   數(shù)據(jù)庫將使我們能夠存儲大量的與Web應用程序中的狀態(tài)相關的信息,有時,用戶會使用的ID頻繁地訪問數(shù)據(jù)庫,我們可以將它存儲在數(shù)據(jù)庫中,在對網(wǎng)站中網(wǎng)頁的多次請求中使用。   總結   ASP.NET中的功能和工具比ASP中更多,使我們能夠更有效和地管理網(wǎng)頁的狀態(tài)。具體選擇哪種方法與你的應用程序有關,在選擇時可以考慮下面的問題:   ·需要存儲多少信息?  ·客戶端接受持久的還是內(nèi)存中的cookie?  ·希望在客戶端還是在服務器端存儲信?  ·要存儲的信息需要保密嗎?    ·希望你的網(wǎng)頁的性能如何?
    立即預約