當前位置:成語大全網 - 新華字典 - 詳解ASP.NET的四種狀態

詳解ASP.NET的四種狀態

 這些狀態的原理對於做 NET開發非常重要 現在詳細解說壹下

  視圖狀態 視圖狀態就在大家身邊不知道大家是否註意 ASP NET是基於服務其處理事件的 當服務器處理完事件時 再返回本窗體時 如果沒有視圖狀態 原來的數據將不會在有 這樣說也許會暈 舉個列子 比如有壹個網站需要妳註冊成為會員 當妳填完信息 (壹般來說頁面會轉向別的地方)這裏為了說明問題 我們讓他返回原來的頁面繼續操作 如果沒有視圖狀態 則妳以前填的數據都沒有了 如果有視圖狀態 則原來的數據還在 試圖狀態在壹些時候很有用 比如說分級驗證時

 那麽 NET是用什麽方法保持試圖狀態呢?這裏微軟采用了壹種特殊的方法 在瀏覽器打開網頁的源代碼 妳會發現壹段妳在編輯網頁時 沒有添加的壹個HTML控件

 形式是這樣的

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

 這是 NET自動給妳添加的 它也是視圖狀態能夠實現的功臣 因為這個空間是隱藏的 所以不會破壞頁面的布局 空件中的value中的值就是就是各個空件以及控件中的數據(狀態) 這些數據是經過哈希函數加密過的 這是為了安全考慮 當網頁提交時 瀏覽器首先將當前網頁中的各種狀態(包括控件以及控件中的數據)保存到這個HTML字段中 當網頁再次返回瀏覽器時 在自動把這些狀態返回給網頁 這樣網頁也就恢復了狀態

 再來講講視圖狀態需要註意的問題

 視圖狀態只能在本網頁與服務器之間保持 不能在不同網頁之間連接時保持 默認情況下 幾乎所有的ASP NET控件都有保持視圖狀態的功能

 視圖狀態有很多優點 但同樣(世上每件事都具有兩面性 壹個好的技術也不列外)有些缺點 首先是安全 雖然數據是經過加密 但對於黑客中的骨灰級人物 還是很不安全的 再次 妳可以想如果妳的頁面包括幾百條記錄 頁面很復雜 這是必會影響網頁的加載速度

應用程序狀態(Application): Application對象是應用程序的全局性對象 用於存放應用程序的全局***享資源 他的本質是HttpApplicationState類的壹個實例 當用戶第壹次反問某虛目錄中的資源時 就被創建 也就是說網站第壹次在互聯網上發布 這時有壹個用戶剛好訪問妳的虛擬目錄資源 那麽Application對象就已經建立 在資源與應用程序之間建立了壹個緩沖區

 應用程序狀態只有在網站運行時存在 當應用程序推出或服務器關閉時(更慘壹點服務器崩潰了) 應用程序狀態中保存的數據機會丟失和損壞 所以對於需要永久保留的資源還是在數據庫中持久化保存的好

 介紹壹些Application對象的壹些操作方法

 Application對象當然是采用最經典的 鍵 值 對的字典方法來定義 其中鍵為字符串代表Application對象的名稱 值可以是任何類型的數據 (例如HTML CSS SQL都可以) 舉個例子

Application[ source ]= special source ;

string message =Application[ source ] ToString();

在Application中添加刪除保存的對象

Application Add( source special source );

Application remove( source );

來壹個狠壹點的操作 把Application中的對象全部請出去

Application Clear();

或Appication RemoveAll();

信息***享自然會引來壹個問題 資源的同步競爭 這類問題解決當然要靠鎖了

Applicatin Lock()//加鎖鎖定資源 不讓其他進程訪問

functions(Application[ source ]);//壹些操作Application對象的操作

Application UnLock();//解除鎖定

會話狀態(Session): Session對象用來保存單個用戶的狀態 在網站中 每個新訪問的用戶都將產生自己的會話(Session)對象 這個Session對象是在服務器端進行管理 只能為它所綁定的用戶服務 如果另壹位用戶也訪問網站 他也經擁有自己的Sesiion對象 兩個用戶的Session對象即使同名 也不能***享同壹個Session對象 各是各的

 實際上Session對象是HttpSessionState類的實例 有很多屬性和方法 大家不妨去看看 這裏不闡述了

 就壹些例子吧

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

 應用程序狀態在網站中總是可用的 這 NET Framework的內部機制 我們不去管 我們來看看Session對象 由於在Machine config配置文件中的Session設置是啟動的 因此不需要額外的步驟就能使用它 盡管如此我們還是要知道壹些原理和本質 Machine config和應用程序的Web config中的設置決定了是啟動還是關閉Session對象 當然如果想要延遲到需要時 在啟用也可以 我們可以在頁面壹級設置

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

 Session對象有壹個Timeout屬性可以設置Session對象的生命周期 它以分鐘為單位 默認是 分鐘 如果再有效時間內沒有連接服務器 那麽Session的所有設置都將失效 如果需要終止Session對象 可以用它的Abandon()方法

 差點忘了 Session有壹點很重要 補充壹下

 session中的關鍵字是不區分大小寫的 因此不要用大小寫來區分Session變量 也就是說Session[ source ]與Session[ SOURCE ]是壹樣的 如果刪掉其中壹個 會有意想不到的結果

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

 向瀏覽器寫入Cookie的方法是這樣的 舉個例子

HttpCookie cookie=new HttpCookie( userNameId );//創建壹個Cookie對象 並且賦值

cookie Value= userNameId //如果已經存在壹Cookie 也可以這樣給它賦值

cookie Expires=DateTime Now+TimeSpan;//設定cookie的生命周期

這裏的TimeSpan是TimeSpan類的壹個實例 cookie的默認時間是 分鐘

Response Cookies Add(cookie);//向瀏覽器中寫入Cookie

HttpCookie cookie =Request Cookies[ cookie ];//讀取Cookie

lishixinzhi/Article/program/net/201311/15574