引言 Web頁(yè)面是無(wú)狀態(tài)的, 服務(wù)器對每一次請求都認為來(lái)自不同用戶(hù),因此,變量的狀態(tài)在連續對同一頁(yè)面的多次請求之間或在頁(yè)面跳轉時(shí)不會(huì )被保留。
在用ASP.NET 設計開(kāi)發(fā)一個(gè)Web系統時(shí), 遇到一個(gè)重要的問(wèn)題是如何保證數據在頁(yè)面間進(jìn)行正確、安全和高效地傳送,Asp.net 提供了狀態(tài)管理等多種技術(shù)來(lái)解決保存和傳遞數據問(wèn)題,以下來(lái)探討.NET 下的解決此問(wèn)題的各種方法和各自的適用場(chǎng)合。 1、ASP.NET頁(yè)面間數據傳遞的各種方法和分析 1.1 使用Querystring 方法 QueryString 也叫查詢(xún)字符串, 這種方法將要傳遞的數據附加在網(wǎng)頁(yè)地址(URL)后面進(jìn)行傳遞。
如頁(yè)面A.aspx 跳轉到頁(yè)面B.aspx,可以用Request.Redirect("B.aspx?參數名稱(chēng)=參數值")方法,也可以用超鏈接:,頁(yè)面跳轉后,在目標頁(yè)面中可用Ruquest["參數名稱(chēng)"]來(lái)接收參數。使用QuerySting 方法的優(yōu)點(diǎn)是實(shí)現簡(jiǎn)單, 不使用服務(wù)器資源;缺點(diǎn)是傳遞的值會(huì )顯示在瀏覽器的地址欄上,有被篡改的風(fēng)險,不能傳遞對象,只有在通過(guò)URL 請求頁(yè)時(shí)查詢(xún)字符串才是可行的。
1.2 利用隱藏域 隱藏域不會(huì )顯示在用戶(hù)的瀏覽器中, 一般是在頁(yè)面中加入一個(gè)隱藏控件, 與服務(wù)器進(jìn)行交互時(shí)把值賦給隱藏控件并提交給下一頁(yè)面。隱藏域可以是任何存儲在網(wǎng)頁(yè)中的與網(wǎng)頁(yè)有關(guān)的信息的存儲庫。
使用隱藏域存入數值時(shí)用:hidden 控件.value=數值,取出接收數值時(shí)用:變量=hidden 控件.value。使用隱藏域的優(yōu)點(diǎn)是實(shí)現簡(jiǎn)單, 隱藏域是標準的HTML 控件,不需要復雜的編程邏輯。
隱藏域在頁(yè)上存儲和讀取,不需要任何服務(wù)器資源,幾乎所有瀏覽器和客戶(hù)端設備都支持具有隱藏域的窗體。缺點(diǎn)是存儲結構少,僅僅支持簡(jiǎn)單的數據結構,存儲量少,因為它被存儲在頁(yè)面本身,所以無(wú)法存儲較大的值,而且大的數據量會(huì )受到防火墻和代理的阻止。
1.3 ViewState ViewState 是由ASP.NET 頁(yè)面框架管理的一個(gè)隱藏的窗體字段。當ASP.NET 執行某個(gè)頁(yè)面時(shí),該頁(yè)面上的ViewState 值和所有控件將被收集并格式化成一個(gè)編碼字符串, 然后被分配給隱藏窗體字段的值屬性。
使用ViewState 傳遞數據時(shí)可用:ViewState [" 變量名"]=數值,在取出數據時(shí)用:變量=ViewState["變量名"]。使用ViewState 的優(yōu)點(diǎn)是:在對同一頁(yè)的多個(gè)請求間自動(dòng)保留值,不用服務(wù)器端資源,實(shí)現簡(jiǎn)單,視圖狀態(tài)中的值經(jīng)過(guò)哈希計算和壓縮,并且針對Unicode 實(shí)現進(jìn)行編碼,其安全性要高于使用隱藏域;缺點(diǎn)是因為ViewState 存儲在頁(yè)面本身,因此如果 存儲較大的值,用戶(hù)顯示頁(yè)和發(fā)送頁(yè)時(shí)的速度可能會(huì )減慢。
雖然視圖狀態(tài)以哈希格式存儲數據,但它仍可以被篡改。 1.4 使用Cookie Cookie 可以在頁(yè)面之間傳遞少量信息, 可以存儲在客戶(hù)端的文本文件中,也可存儲在客戶(hù)端的內存中。
Cookie 方法適用于存儲少量頁(yè)面中經(jīng)常改動(dòng)的信息, 如為登陸過(guò)的網(wǎng)站保存登陸用戶(hù)名,為用戶(hù)輸入提供方便,還有在一些用戶(hù)自定義項目上保存用戶(hù)的個(gè)性化設置。使用Cookie傳遞數據時(shí)可用:Response.Cookies["鍵名"]=鍵值;取出數據用:變量名=Request.Cookies["鍵名"]。
使用Cookie 優(yōu)點(diǎn)是:Cookie 存儲在客戶(hù)端, 不使用服務(wù)器資源,實(shí)現簡(jiǎn)單,可配置到期時(shí)間。缺點(diǎn)是:可以存儲的數據量比較少,由于Cookie 并不被所有的瀏覽器支持,而且還可能被用戶(hù)禁止或刪除,所以不能用于保存關(guān)鍵數據。
另外,Cookie 保存的形式是簡(jiǎn)單的明文文本,在它里面不宜保存敏感的、未加密的數據。 1.5 使用Application 變量 使用Application 變量也可以實(shí)現頁(yè)面間的傳值,Application變量是全局性的,所有用戶(hù)共享一個(gè)Application 變量,一旦定義,它將影響到程序的所有部分。
如果想在整個(gè)應用程序范圍使用某個(gè)變量值Application 對象將是最佳的選擇。存入數據時(shí), 把值添加到Application 變量里:Application["變量名"]=數值;取出數據用:變量=Application["變量名"];在不需要使用該Application 時(shí),要顯式清除它:Application["量名"]=null。
Application 優(yōu)點(diǎn):易于使用,全局范圍。可供應用程序中的所有頁(yè)來(lái)訪(fǎng)問(wèn)。
缺點(diǎn):若保存數據的服務(wù)器端進(jìn)程被損壞(如因服務(wù)器崩潰、升級或關(guān)閉而損壞),那么數據就會(huì )丟失,所以利用Application 一定要有保底的策略;占用服務(wù)器端的內存,這可能會(huì )影響服務(wù)器的性能以及應用程序的可伸縮性。 1.6 使用Session 變量 Session 對象可以用來(lái)存儲需要維護的指定對話(huà)的信息,不同的客戶(hù)端生成不同的Session 對象。
Session 用于存儲特定于單獨會(huì )話(huà)的短期信息。Session 的使用方法和格式與Application 相同。
優(yōu)點(diǎn):易于實(shí)現,并且提供較高的安全性和持久性,可以應對IIS 重啟和輔助進(jìn)程重啟,可在多進(jìn)程中使用。缺點(diǎn)是耗用服務(wù)器端的內存。
所以不要存儲大量的信息。Session 最常見(jiàn)的用途是與Cookie 一起向Web 應用程序提供用戶(hù)標識功能,Session也可用于不支持Cookie 的瀏覽器。
web數據交互方式,web數據交互,簡(jiǎn)單的講,是client與server端的數據交互,通過(guò)/course/109084#term_id=100116274
C/S模式和B/S各有其有點(diǎn)也各有其缺點(diǎn),B/S模式在開(kāi)發(fā)中需要考慮數據如何從客戶(hù)端提交到服務(wù)器端,數據又如何返回到客戶(hù)端,這些是B/S模式所特有的,在去年之前,開(kāi)發(fā)B/S模式的程序,我都是利用form來(lái)交互數據,當我看到XML之后,發(fā)現XML是個(gè)好冬冬,有很多優(yōu)點(diǎn),有好的東西當然不能獨享啦,想當年為了實(shí)現XML交互數據,幾乎把網(wǎng)絡(luò )翻了個(gè)遍。咚,一塊磚頭上來(lái)了。呵呵,廢話(huà)少說(shuō),下面我們就進(jìn)入正題。
B/S模式分為服務(wù)器端和客戶(hù)端,客戶(hù)端接受用戶(hù)的請求,客戶(hù)端向應用服務(wù)提出請求,應用服務(wù)從數據庫服務(wù)中獲得數據,應用服務(wù)將數據進(jìn)行計算并將結果提交給客戶(hù)端,客戶(hù)端將結果呈現給用戶(hù)。這樣,我們就看到了數據從客戶(hù)到服務(wù)器,經(jīng)過(guò)服務(wù)器的處理再返回到客戶(hù)端,由客戶(hù)端軟件(如IE)顯示結果。
(以ASP教本語(yǔ)言為例,其它的語(yǔ)言一樣哈。)
1.Form方式
Form方式是最基本的向服務(wù)器提交數據的方式。
test.asp文件代碼:
<%@ Language=VBScript %>
<%
Response.Expires=-1
Response.CharSet="UTF-8"
Session.CodePage="65001"
%>
<form name="frmTest" id="frmTest" action="test.asp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.869秒