這些狀態的原理對於做 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