第6章HTTP請求、響應(yīng)及狀態(tài)管理_第1頁
第6章HTTP請求、響應(yīng)及狀態(tài)管理_第2頁
第6章HTTP請求、響應(yīng)及狀態(tài)管理_第3頁
第6章HTTP請求、響應(yīng)及狀態(tài)管理_第4頁
第6章HTTP請求、響應(yīng)及狀態(tài)管理_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第6章 HTTP請求、響應(yīng)及狀態(tài)管理作者:沈士根、汪承焱、許小東 清華大學(xué)出版社清華大學(xué)出版社本章要點(diǎn):2掌握HttpRequest對象的應(yīng)用。掌握HttpResponse對象的應(yīng)用。掌握HttpServerUtility對象的應(yīng)用,理解不同方法的頁面重定向。掌握跨頁面提交的應(yīng)用。了解ViewState、HiddenField,掌握Cookie、Session、Application、Profile的應(yīng)用。目錄36.1 HTTP請求6.2 HTTP響應(yīng)6.3 HttpServerUtility6.4 跨頁面提交6.5 狀態(tài)管理6.5.1 ViewState6.5.2 HiddenField控件

2、6.5.3 Cookie6.5.4 Session6.5.5 Application6.5.6 Profile6.6 小結(jié)6.1 HTTP請求4ASP.NET 4.5通過Page類的Request屬性能很好地控制請求數(shù)據(jù),如訪問客戶端的瀏覽器信息、查詢字符串、Cookie等信息。實(shí)際上,Page類的Request屬性值是一個(gè)HttpRequest對象,它封裝了HTTP請求信息。HttpRequest對象的數(shù)據(jù)集合對應(yīng)表5數(shù)據(jù)集合數(shù)據(jù)集合說明說明QueryString從查詢字符串中讀取用戶提交的數(shù)據(jù)Cookies獲得客戶端的Cookie數(shù)據(jù)ServerVariables獲得服務(wù)器端或客戶端的環(huán)境

3、變量信息Browser獲得客戶端瀏覽器信息6.1 HTTP請求(續(xù))6在使用HttpRequest對象時(shí),常通過Page類的Request屬性調(diào)用,所以要獲取HttpRequest對象的Browser數(shù)據(jù)集合的語法格式常寫為:Request.Browser。利用QueryString數(shù)據(jù)集合獲得的查詢字符串是指跟在URL后面的變量及值,它們以“?”與URL間隔,不同的變量之間以“&”間隔。實(shí)例6-1 利用QueryString在頁面間傳遞數(shù)據(jù)信息7在本實(shí)例中,當(dāng)單擊QueryString1.aspx頁面上鏈接后,頁面被重定向到QueryString2.aspx;在頁面QueryString2.

4、aspx中顯示從QueryString1.aspx傳遞過來的查詢字符串?dāng)?shù)據(jù)信息。源程序:QueryString1.aspx源程序:QueryString2.aspx6.1 HTTP請求(續(xù))8利用ServerVariables數(shù)據(jù)集合可以很方便地獲取服務(wù)器端或客戶端的環(huán)境變量信息,如客戶端的IP地址等。語法格式為:Request.ServerVariables環(huán)境變量名。常用的環(huán)境變量表9環(huán)境變量名環(huán)境變量名說明說明LOCAL_ADDR服務(wù)器端的IP地址PATH_TRANSLATED當(dāng)前頁面在服務(wù)器端的物理路徑REMOTE_ADDR客戶端IP地址REMOTE_HOST客戶端計(jì)算機(jī)名SERVER

5、_NAME服務(wù)器端計(jì)算機(jī)名SERVER_PORT服務(wù)器端網(wǎng)站的端口號(hào)6.1 HTTP請求(續(xù))10Browser數(shù)據(jù)集合用于返回用戶的瀏覽器類型、版本等信息,以便根據(jù)不同的瀏覽器編寫不同的頁面。語法格式為:Request.Browser瀏覽器特性名。瀏覽器特性名對應(yīng)表11名稱名稱說明說明Browser瀏覽器類型Version瀏覽器版本號(hào)MajorVersion瀏覽器主版本號(hào)MinorVersion瀏覽器次版本號(hào)Cookies邏輯值,true表示支持CookieJavaScript邏輯值,true表示支持JavaScriptActiveXControls 邏輯值,true表示支持ActiveX控

6、件實(shí)例6-2 利用ServerVariables和Browser返回服務(wù)器端和客戶端信息12本實(shí)例利用ServerVariables和Browser返回服務(wù)器端和客戶端的部分信息。源程序:Request.aspx注意注意:本實(shí)例是在VSEW 2012中瀏覽Request.aspx后的效果圖,因此,服務(wù)器端和客戶端的IP地址都為本機(jī)地址。其中,“:1”表示IPv6格式的本機(jī)地址。一旦將網(wǎng)站發(fā)布到安裝IIS 7.5的Web服務(wù)器后,再從其他的客戶端訪問頁面將看到不同的地址。6.2 HTTP響應(yīng)13ASP.NET 4.5通過Page類的Response屬性可以很好地控制輸出的內(nèi)容和方式,如頁面重定向

7、、保存Cookie等。實(shí)際上,Response屬性值是一個(gè)HttpResponse對象。HttpResponse對象的常用屬性和方法表14成員成員說明說明Cookies屬性添加或修改客戶端的CookieAppendToLog()方法將自定義日志信息添加到IIS日志文件中End()方法終止頁面的執(zhí)行Redirect()方法頁面重定向,可通過URL附加查詢字符串實(shí)現(xiàn)不同頁面之間的數(shù)據(jù)傳遞Write()方法在頁面上輸出信息實(shí)例6-3 利用Write()方法輸出XHTML文本15利用Write()方法除可以輸出提示信息、變量值外,還可以輸出XHTML文本或JavaScript腳本等。源程序:Write

8、.aspx程序說明16for循環(huán)執(zhí)行完后向?yàn)g覽器輸出的XHTML文本如下: 我喜歡ASP.NET! 我喜歡ASP.NET! 我喜歡ASP.NET!其中,“”的輸出需要轉(zhuǎn)義符,即在源程序中必須寫成“”。實(shí)例6-4 利用Redirect()方法重定向頁面17在本實(shí)例中,選擇“教師”后單擊“確定”按鈕,頁面將被重定向到教師頁面Teacher.aspx。源程序:Redirect.aspx源程序:Teacher.aspx6.3 HttpServerUtility18在ASP.NET 4.5中,Page類的Server屬性封裝了服務(wù)器端的一些操作,如將XHTML元素標(biāo)記轉(zhuǎn)換為字符實(shí)體、獲取頁面的物理路徑等

9、。實(shí)際上,Server屬性值是一個(gè)HttpServerUtility對象。HttpServerUtility對象的常用屬性和方法19ScriptTimeOut屬性:設(shè)置頁面執(zhí)行的最長時(shí)間,單位為秒。Execute()方法:停止執(zhí)行當(dāng)前頁面,轉(zhuǎn)到并且執(zhí)行新頁面,執(zhí)行完畢后返回原頁面,繼續(xù)執(zhí)行后續(xù)語句。HtmlEncode()方法:將字符串中的XHTML元素標(biāo)記轉(zhuǎn)換為字符實(shí)體,如將“”轉(zhuǎn)換為<。MapPath()方法:獲取頁面的物理路徑。HttpServerUtility對象的常用屬性和方法(續(xù))20Transfer()方法:停止執(zhí)行當(dāng)前頁面,轉(zhuǎn)到并且執(zhí)行新頁面,執(zhí)行完畢后不再返回原頁面。Ur

10、lEncode()方法:將字符串中某些特殊字符轉(zhuǎn)換為URL編碼,如將“/”轉(zhuǎn)換為“%2f”,空格轉(zhuǎn)換為“+”。Response.Redirect()、Server.Execute()和Server.Transfer()的區(qū)別21Redirect()方法盡管在服務(wù)器端執(zhí)行,但重定向?qū)嶋H發(fā)生在客戶端,可從瀏覽器地址欄中看到地址變化;而Execute()和Transfer()方法的重定向?qū)嶋H發(fā)生在服務(wù)器端,在瀏覽器的地址欄中看不到地址變化。Redirect()和Transfer()方法執(zhí)行完新頁面后,并不返回原頁面;而Execute()方法執(zhí)行完新頁面后會(huì)返回原頁面繼續(xù)執(zhí)行。Response.Red

11、irect()、Server.Execute()和Server.Transfer()的區(qū)別(續(xù))22Redirect()方法可重定向到同一網(wǎng)站的不同頁面,也可重定向到其它網(wǎng)站的頁面;而Execute()和Transfer()方法只能重定向到同一網(wǎng)站的不同頁面。利用Redirect()方法在不同頁面之間傳遞數(shù)據(jù)時(shí),狀態(tài)管理采用查詢字符串形式;而Execute()和Transfer()方法的狀態(tài)管理方式與Button類型控件的跨頁面提交方式相同。實(shí)例6-5 運(yùn)用HttpServerUtility對象23Server.HtmlEncode()方法常用于在頁面上輸出XHTML元素。Server.Url

12、Encode()常用于處理URL地址,如地址中包含空格等。在本實(shí)例中,單擊Student.aspx鏈接時(shí)將丟失“張”后面的信息。單擊Student.aspx(UrlEncode)鏈接時(shí),因使用了Server.UrlEncode()方法不再丟失“張”后面的信息。源程序:Server.aspx6.4 跨頁面提交24利用Button類型控件實(shí)現(xiàn)跨頁面提交是另一種實(shí)現(xiàn)頁面重定向的方法。需要將源頁面上Button類型控件的PostBackUrl屬性值設(shè)置為目標(biāo)頁面路徑。而在目標(biāo)頁面上,需要在頁面頭部添加 PreviousPageType指令,并設(shè)置VirtualPath屬性值為源頁面路徑。在目標(biāo)頁面上訪

13、問源頁面中數(shù)據(jù)的方法有兩種:一是利用PreviousPage.FindControl()方法訪問源頁面上的控件;二是先在源頁面上定義公共屬性,再在目標(biāo)頁面上利用“PreviousPage.屬性名”獲取源頁面中數(shù)據(jù)??珥撁嫣峤慌c調(diào)用Server.Execute()或Server.Transfer()方法的區(qū)別25如果是跨頁面提交,那么IsCrossPagePostBack屬性值為true;如果是調(diào)用Server.Execute()或Server.Tranfer()方法,那么IsCrossPagePostBack屬性值為false。實(shí)例6-6 運(yùn)用跨頁面提交技術(shù)26在Cross1.aspx中輸入用

14、戶名、密碼后單擊“確定”按鈕,將通過跨頁面提交技術(shù)重定向到Cross2.aspx,并且顯示在Cross1.aspx中輸入的數(shù)據(jù)信息。源程序:Cross1.aspx源程序:Cross2.aspx6.5 狀態(tài)管理27客戶端狀態(tài)管理:將狀態(tài)數(shù)據(jù)保存在客戶端計(jì)算機(jī)上,當(dāng)客戶端向服務(wù)器端發(fā)送請求時(shí),狀態(tài)數(shù)據(jù)會(huì)隨之發(fā)送到服務(wù)器端??蛇x擇ViewState、ControlState、HiddenField、Cookie和查詢字符串。服務(wù)器狀態(tài)管理:將狀態(tài)數(shù)據(jù)保存在服務(wù)器上。可選擇Session狀態(tài)、Application狀態(tài)或數(shù)據(jù)庫形式??蛻舳藸顟B(tài)不消耗服務(wù)器內(nèi)存資源,但容易泄露數(shù)據(jù)信息。而服務(wù)器端狀態(tài)將消

15、耗服務(wù)器端內(nèi)存資源,但具有較高的安全性。6.5.1 ViewState28又稱為視圖狀態(tài),用于維護(hù)Web窗體自身的狀態(tài)。當(dāng)用戶請求ASP.NET 4.5頁面時(shí),ASP.NET 4.5將ViewState封裝為一個(gè)或幾個(gè)隱藏的表單域傳遞到客戶端。當(dāng)用戶再次提交頁面時(shí),ViewState也將被提交到服務(wù)器端。這樣后續(xù)的請求就可以獲得上一次請求時(shí)的狀態(tài)??稍诳蛻舳藶g覽ASP.NET 4.5頁面時(shí),選擇“查看”“源文件”命令進(jìn)行查看。EnableViewState屬性:值為False可實(shí)現(xiàn)禁用ViewState的目的。6.5.2 HiddenField控件29又稱隱藏域,用于維護(hù)Web窗體自身的狀態(tài)。

16、不會(huì)顯示在用戶的瀏覽器中,但可以像設(shè)置標(biāo)準(zhǔn)控件的屬性那樣設(shè)置其屬性。成員主要有Value屬性和ValueChanged事件。注意:注意:要觸發(fā)ValueChanged事件,需設(shè)置HiddenField控件的EnableViewState屬性值為False。6.5.3 Cookie30保存在客戶端硬盤或內(nèi)存中的一小段文本信息,如網(wǎng)站、用戶、會(huì)話等有關(guān)的信息。與網(wǎng)站關(guān)聯(lián),而不是與特定的頁面關(guān)聯(lián)??梢栽诳蛻舳诵薷腃ookie設(shè)置和禁用Cookie。當(dāng)用戶的瀏覽器關(guān)閉了對Cookie的支持,但又要使用Cookie時(shí),只需在Web.config文件的元素中加入以下語句: 或 6.5.3 Cookie(續(xù)

17、)31在Windows 7操作系統(tǒng)中,Cookie文本文件存儲(chǔ)于“%userprofile%AppDataRoamingMicrosoft WindowsCookies”文件夾。提供System.Web.HttpCookie類來處理Cookie,常用的屬性是Value和Expires。建立Cookie32方法一:Response.CookiesName.Value=張三; 方法二:HttpCookie cookie = new HttpCookie(Name);cookie.Value = 張三;cookie.Expires = DateTime.Now.AddDays(1);Response

18、.Cookies.Add(cookie);獲取Cookie33Request.Cookies.Name.Value實(shí)例6-7 利用Cookie限制頁面訪問34在本實(shí)例中,用戶訪問Cookie.aspx時(shí),若在Cookie中已有用戶信息則顯示歡迎信息,否則被重定向到CookieLogin.aspx。這意味著當(dāng)Cookie中未包含用戶信息時(shí),就不能訪問Cookie.aspx,實(shí)現(xiàn)了限制頁面訪問的目的。源程序:Cookie.aspx源程序:CookieLogin.aspx程序說明35測試時(shí)先瀏覽Cookie.aspx,此時(shí)因無用戶名Cookie信息,頁面被重定向到CookieLogin.aspx,輸

19、入用戶名和密碼后單擊“確定”按鈕將用戶名存入Cookie。關(guān)閉瀏覽器。再次瀏覽Cookie.aspx可看到歡迎信息。6.5.4 Session36又稱會(huì)話狀態(tài),常用于存儲(chǔ)用戶信息、多頁面間的信息傳遞、購物車等。產(chǎn)生在服務(wù)器端,只能為當(dāng)前訪問的用戶服務(wù)。以用戶對網(wǎng)站的最后一次訪問開始計(jì)時(shí),當(dāng)計(jì)時(shí)達(dá)到會(huì)話設(shè)定時(shí)間并且期間沒有訪問操作時(shí),則會(huì)話自動(dòng)結(jié)束。如果同一個(gè)用戶在瀏覽期間關(guān)閉瀏覽器后再訪問同一個(gè)頁面,服務(wù)器會(huì)為該用戶產(chǎn)生新的Session。6.5.4 Session(續(xù))37用一個(gè)唯一的Session ID來標(biāo)識(shí)每一個(gè)會(huì)話。若客戶端支持Cookie,則將Session ID保存到相應(yīng)的Cook

20、ie中;若不支持,就將Session ID添加到URL中。注意注意:不管Session ID保存在Cookie還是添加在URL中,都是明文。如果需要保護(hù)Session ID,可考慮采用HTTPS通信。Session由System.Web.HttpSessionState類實(shí)現(xiàn)。HttpSessionState常用的屬性和方法表38屬性和方法屬性和方法說明說明Contents屬性獲取對當(dāng)前會(huì)話狀態(tài)對象的引用Mode屬性獲取當(dāng)前會(huì)話狀態(tài)的模式SessionID屬性獲取會(huì)話的唯一標(biāo)識(shí)TimeOut屬性獲取或設(shè)置會(huì)話狀態(tài)持續(xù)時(shí)間,單位為分鐘,默認(rèn)為20分鐘Abandon()方法取消當(dāng)前會(huì)話Remove

21、()方法刪除會(huì)話狀態(tài)集合中的項(xiàng)Session_Start()和Session_End()方法39包含于Global.asax文件中。Session_Start()方法中代碼在新會(huì)話啟動(dòng)時(shí)會(huì)自動(dòng)被執(zhí)行。Session_End()方法中代碼在會(huì)話結(jié)束時(shí)會(huì)自動(dòng)被執(zhí)行。注意: 只有Web.config 文件中的 sessionState 模式設(shè)置為InProc時(shí),才會(huì)執(zhí)行Session_End()方法代碼。如果會(huì)話模式設(shè)置為StateServer或SQLServer,則不會(huì)執(zhí)行Session_End()方法代碼。Session的賦值40方法一: SessionName=張三;方法二: Session.

22、ContentsName=張三;注意:注意:Session使用的名稱不區(qū)分大小寫,因此不要用大小寫區(qū)分不同的Session變量。Session的存儲(chǔ)方式41在Web.config中通過元素的mode屬性來指定。共有Off、InProc、StateServer、SQLServer和Custom五個(gè)枚舉值供選擇,分別代表禁用、進(jìn)程內(nèi)、獨(dú)立的狀態(tài)服務(wù)、SQLServer和自定義數(shù)據(jù)存儲(chǔ)。在實(shí)際工程項(xiàng)目中,一般選擇StateServer,而對于大型網(wǎng)站常選用SQLServer。實(shí)例6-8 利用Session限制頁面訪問42本實(shí)例功能類似于實(shí)例6-7,但適用于客戶端已禁用Cookie的情況。利用本實(shí)例能

23、限制對Session.aspx的訪問,即首先要通過登錄認(rèn)證才能訪問該頁面。源程序:Session.aspx源程序:SessionLogin.aspx程序說明43當(dāng)用戶直接訪問Session.aspx時(shí),會(huì)判斷SessionName狀態(tài)值,若為空,則被重定向到SessionLogin.aspx,否則顯示歡迎信息。在SessionLogin.aspx中用戶登錄成功后,將建立SessionName狀態(tài)值。此時(shí)要測試是否存在SessionName狀態(tài)值,應(yīng)在瀏覽SessionLogin.aspx頁面的瀏覽器中直接更改地址來訪問Session.aspx。6.5.5 Application44又稱應(yīng)用程序

24、狀態(tài),應(yīng)用于所有的用戶。Application狀態(tài)存在于網(wǎng)站運(yùn)行過程中,當(dāng)網(wǎng)站關(guān)閉時(shí)將被釋放。由System.Web.HttpApplicationState類來實(shí)現(xiàn)。要修改Application狀態(tài)值時(shí),首先要調(diào)用Application.Lock()方法鎖定Application狀態(tài),值修改后再調(diào)用Application.Unlock()方法解除鎖定。Application_Start()、Application_End()、Application_Error()方法包含于Global類。實(shí)例6-9 統(tǒng)計(jì)網(wǎng)站在線人數(shù)45本實(shí)例呈現(xiàn)網(wǎng)站在線人數(shù)??紤]三個(gè)方面:初始化計(jì)數(shù)器;當(dāng)一個(gè)用戶訪問網(wǎng)站時(shí)

25、,計(jì)數(shù)器增1;當(dāng)一個(gè)用戶離開網(wǎng)站時(shí),計(jì)數(shù)器減1。源程序:Global.asax源程序:Application.aspx程序說明46可同時(shí)利用多個(gè)瀏覽器或多臺(tái)計(jì)算機(jī)訪問Application.aspx,進(jìn)行測試。當(dāng)然,若通過多臺(tái)計(jì)算機(jī)進(jìn)行測試,需要先將網(wǎng)站復(fù)制到IIS 7.5。注意:注意:Session_End()方法代碼只有到達(dá)TimeOut屬性設(shè)置的時(shí)間時(shí)才被執(zhí)行,所以關(guān)閉瀏覽器不會(huì)立即調(diào)用該方法。6.5.6 Profile47用戶個(gè)性化配置功能可以很方便地為每個(gè)用戶定義、存儲(chǔ)和管理配置信息。會(huì)自動(dòng)識(shí)別不同的匿名用戶。默認(rèn)情況下,配置信息以ASPNETDB.mdf數(shù)據(jù)庫名存儲(chǔ)于網(wǎng)站的App_Data文件夾。使用“%windir%Microsoft.NETFramework v4.0.30319”文件夾中的aspnet_regsql.exe命令行工具可將配置信息保存到其他版本的SQL Server中。用戶個(gè)性化配置過程48第一,在Web.config文件中的元素中定義配置信息名、數(shù)據(jù)類型、是否允許匿名用戶存儲(chǔ)信息等。第二,在程序中利用Profile對象訪問用戶個(gè)性化信息。實(shí)例6-10 利用Profile存取匿名用戶的郵政編碼信息49在本實(shí)例中,當(dāng)某匿名用戶輸入郵編

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論