熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> ASP編程 >> 正文

ASP.NET中的狀態管理

2013-11-15 14:19:54  來源: ASP編程 


  我們在ASP中能夠通過cookie查詢字符串應用程序對話等輕易地解決這些問題現在到了ASPNET環境中我們仍然可以使用這些功能只是它們的種類更多了功能也更強大了

  管理互聯網網頁主要有二種不同的方法客戶端和服務器端

  客戶端的狀態管理

  在客戶端服務器之間的多次請求應答期間服務器上不保存信息信息將被存儲在網頁或用戶的計算機上

  ACookie

  cookie是存儲在客戶端文件系統的文本文件中或客戶端浏覽器對話的內存中的少量數據它主要用來跟蹤數據設置下面我們舉例說明假設我們要定制化一個歡迎互聯網網頁當用戶請求缺省的互聯網網頁時應用程序會首先檢查用戶在此前是否已經注冊我們可以從cookie中獲取用戶的信息

                          [c#]
                          if (RequestCookies[username]!=null)
                          lbMessagetext=Dear +RequestCookies[username]Value+ Welcome shopping here!;
                          else
                          lbMessagetext=Welcome shopping here!;

  如果要存儲用戶的資料我們可以使用下面的代碼

                          [c#]
                          ResponseCookies[username]Value=username;

   這樣當用戶請求該網頁時我們就可以方便地識別該用戶

  B隱藏域

  隱藏域不會顯示在用戶的浏覽器中但我們可以象設置標准控制的屬性那樣設置其屬性當一個網頁被提交給服務器時隱藏域的內容和其他控制的值一塊兒被送到HTTP Form集合中隱藏域可以是任何存儲在網頁中的與網頁有關的信息的存儲庫隱藏域在其value屬性中存儲一個變量而且必須被顯性地添加在網頁上

  ASPNET中的HtmlInputHidden控制提供了隱藏域的功能

                          [c#]
                          protected SystemWebUIHtmlControlsHtmlInputHidden Hidden;
                          file://給隱藏域賦值
                          HiddenValue=this is a test;
                          file://獲得一個隱藏域的值
                          string str=HiddenValue;

  需要注意的是要使用隱藏域就必須使用HTTPPost方法提交互聯網網頁盡管其名字是隱藏域但它的值並不是隱藏的我們可以通過查看源代碼功能找到它的值
  C狀態查看

  包括網頁本身在內的Web Forms網頁上的每個控制都有一個名字為ViewState的屬性它是一個自動保持網頁和控制狀態的內置結構這意味著在向服務器提交網頁後我們無需采取任何措施來恢復控制的數據
在這裡對我們有用的是ViewState屬性我們可以利用它來保存與服務器之間多次的請求應答期間的信息

                          [c#]
                          file://保存信息
                          ViewStateAdd(shapecircle);
                          file://獲取信息
                          string shapes=ViewState[shape];

  注意與隱藏域不同的是在使用查看源代碼功能時ViewState屬性的值是不可見的它們是被壓縮和加密的
  D查詢字符串

  查詢字符串提供了一種簡單而受限制的維護狀態信息的方法我們可以方便地將信息從一個網頁傳遞給另一個網頁但大多數浏覽器和客戶端裝置都把URL的長度限制在個字符長此外查詢值是通過URL傳遞給互聯網的因此在有些情況下安全就成了一個大問題

  帶有查詢字符串的URL如下所示

   http://wwwexamplescom/listaspx?categoryid=&productid=

  當有客戶端請求listaspx後可以通過下面的代碼獲取目錄和產品信息

                          [c#]
                          string categoryid productid;
                          categoryid=RequestParams[categoryid];
                          productid=RequestParams[productid];

  注意我們只能使用HTTPGet提交該互聯網網頁否則就不能從查詢字符串獲得需要的值
  服務器端的狀態管理

  信息存儲在服務器上盡管其安全性較高但會占用較多的web服務器資源

  AAplication對象

  Aplication對象提供了一種讓所有在Web應用服務器中運行的代碼訪問的存儲數據的機制插入應用程序對象狀態變量的數據應該能夠被多個對話共享而且不會頻繁地改變正是因為它能夠被全部應用程序所訪問因此我們需要使用Lock和UnLock對避免其中的值出現沖突


                          [c#] 
                          ApplicationLock(); 
                          Application[mydata]=mydata
                          ApplicationUnLock();

  BSession對象

  Session對象可以用來存儲需要在服務器的多次請求應答期間和對網頁的請求期間進行維護的指定對話的信息Session對象是每個對話的存在的基礎也就是說不同的客戶端生成不同的Session對象存儲在對話狀態變量中的數據存在的周期較短

  每個活動的ASPNET對話是由一個包含合法的URL ASCII字符長度為位的SessionID字符串唯一確定和跟蹤的SessionID的值是由一個能夠保證唯一性的算法生成的以便對話之間不會沖突SessionID的隨意性使得我們很難猜測出一介現有對話的ID

  根據應用程序的配置設置情況SessionID通過HTTP cookie或修改後的URL在客戶端服務器請求之間進行傳輸那麼如何設置應用程序配置的對話裝備方法

  每個web應用程序必須有一個名字為webconfig的配置文件它是基於XML文件的下面是一個名字為sessionState的對話


  cookieless選項的值為true或false當其值為false(缺省值)時ASPNET將使用HTTP cookie來識別用戶當其值是true時ASPNET將隨機地生成一個唯一的號碼並將它放在被請求的文件的前面這一號碼是用來識別用戶的我們能夠在IE的地址欄中看到它

  http://localhost/Management/(yzakzezeqxutukyzqqp)/Defaultaspx
  OK下面我們再回到session對象

                          [c#]
                          file://存儲信息
                          Session[myname]=Mike;
                          file://獲得信息
                          myname=Session[myname];

  C數據庫

  數據庫將使我們能夠存儲大量的與Web應用程序中的狀態相關的信息有時用戶會使用唯一的ID頻繁地訪問數據庫我們可以將它存儲在數據庫中在對網站中網頁的多次請求中使用
  總結

  ASPNET中的功能和工具比ASP中更多使我們能夠更有效和高效地管理網頁的狀態具體選擇哪種方法與你的應用程序有關在選擇時可以考慮下面的問題

  ·需要存儲多少信息?
  ·客戶端接受持久的還是內存中的cookie?
  ·希望在客戶端還是在服務器端存儲信?
  ·要存儲的信息需要保密嗎?  
  ·希望你的網頁的性能如何?

From:http://tw.wingwit.com/Article/program/ASP/201311/21903.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.