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