版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、006 HTTP請求、響應及狀態(tài)管理1本章要點:掌握HttpRequest對象的應用掌握HttpResponse對象的應用掌握HttpServerUtility對象的應用,理解不同方法的頁面重定向掌握跨頁面提交的應用。了解ViewState、HiddenField,掌握Cookie、Session、Application、Profile應用。2目錄6.1 HTTP請求6.2 HTTP響應6.3 HttpServerUtility6.4 跨網頁提交3目錄6.5 狀態(tài)管理6.5.1 ViewState6.5.2 HiddenField控件6.5.3 Cookie6.5.4 Session6.5.5
2、 Application6.5.6 Profile6.6 小結46.1 HTTP請求ASP.NET通過Page類的屬性Request能很好地控制請求數據,如訪問客戶端的瀏覽器信息、查詢字符串、Cookie等信息。Page類的屬性Request是一個HttpRequest對象,它封裝了HTTP請求信息。 5HttpRequest對象的數據集合對應表 數據集合說明QueryString從查詢字符串中讀取用戶提交的數據。Cookies獲得客戶端的Cookies數據。ServerVariables獲得服務器端或客戶端環(huán)境變量信息。ClientCertificate獲得客戶端的身份驗證信息。Browse
3、r獲得客戶端瀏覽器信息。獲取HttpRequest對象的Browser數據集合的語法格式:Request.Browser。 6QueryString數據集合 使用QueryString獲得的查詢字符串是指跟在URL后面的變量及值,以“?”與URL間隔,不同的變量之間以“&”間隔。 7實例6-1 QueryString的使用當單擊QueryString1.aspx頁面上鏈接后,頁面重定向到QueryString2.aspx;在頁面QueryString2.aspx中顯示從QueryString1.aspx傳遞過來的查詢字符串數據信息。 源程序:QueryString1.aspx 源程序:Quer
4、yString2.aspx 8ServerVariables數據集合 可很方便地取得服務器端或客戶端的環(huán)境變量信息,如客戶端的IP地址等。語法格式如下:Request.ServerVariables環(huán)境變量名 9常用的環(huán)境變量表 環(huán)境變量名說明CONTENT_LENGTH發(fā)送到客戶端的文件長度。CONTENT_TYPE發(fā)送到客戶端的文件類型。LOCAL_ADDR服務器端的IP地址。REMOTE_ADDR客戶端IP地址。REMOTE_HOST客戶端計算機名。SERVER_NAME服務器端計算機名。SERVER_PORT服務器端網站的端口號。10Browser數據集合 用于判斷用戶的瀏覽器類型、版
5、本等,以便根據不同的瀏覽器編寫不同的網頁。語法格式為:Request.Browser瀏覽器特性名。 11瀏覽器特性名對應表 名稱說明Browser瀏覽器類型。Version瀏覽器版本號。MajorVersion瀏覽器主版本號。MinorVersion瀏覽器次版本號。Frames邏輯值,true表示支持框架功能。Cookies邏輯值,true表示支持Cookie。JavaScript邏輯值,true表示支持JavaScript。ActiveXControls邏輯值,true表示支持ActiveXControl控件。12實例6-2 ServerVariables和Browser應用界面顯示信息為S
6、erverVariables和Brower數據集合中相應值。源程序:Request.aspx 136.2 HTTP響應ASP.NET通過Page類的屬性Response(即HttpResponse對象)可以很好地控制輸出的內容和方式,如頁面重定向、保存Cookie等。14HttpResponse對象的常用屬性和方法表 Buffer屬性邏輯值,true表示先輸出到緩沖區(qū),在處理完整個響應后再將數據輸出到客戶端瀏覽器;false表示直接將信息輸出到客戶端瀏覽器。Clear()當屬性Buffer值為true時,Response.Clear()表示清除緩沖區(qū)中數據信息。End()終止ASP.NET應用
7、程序的執(zhí)行。Flush()立刻輸出緩沖區(qū)中的網頁。Redirect()頁面重定向,可通過URL附加查詢字符串在不同網頁之間傳遞數據。Write()在頁面上輸出信息。AppendToLog()將自定義日志信息添加到IIS日志文件中。15實例6-3 Write()方法應用 利用Write()方法除可以輸出提示信息、變量值外,也可以輸出XHTML文本或JavaScript腳本等。 源程序:Write.aspx 16實例6-4 Redirect()方法應用選擇“教師”后,頁面重定向到教師頁面Teacher.aspx面,選擇“學生”后頁面重定向到學生頁面Student.aspx。 源程序:Redirec
8、t.aspx 源程序:Teacher.aspx 176.3 HttpServerUtilityPage類的屬性Server(即HttpServerUtility對象)封裝了服務器端的一些操作,如轉換XHTML元素標志、獲取網頁的物理路徑等。 18HttpServerUtility對象的常用屬性和方法表 ScriptTimeout屬性設置腳本文件執(zhí)行的最長時間,如:Server.ScriptTimeout=60; /設置最長時間為60秒Execute()停止執(zhí)行當前網頁,轉到新的網頁執(zhí)行,執(zhí)行完畢后返回到原網頁,繼續(xù)執(zhí)行后續(xù)語句。HtmlEncode()將字符串中的XHTML元素標記轉換為字符實
9、體,如將“”轉換為<。HtmlDecode()與HtmlEncode作用相反。 MapPath()獲取網頁的物理路徑。Transfer()停止執(zhí)行當前網頁,轉到新的網頁執(zhí)行,執(zhí)行完畢后不再返回原網頁。UrlEncode()將字符串中某些特殊字符轉換為URL編碼,如將“/”轉換為“%2f”,空格轉換為“+”等。UrlDecode()與UrlEncode作用相反。19區(qū)分Response.Redirect()、Server.Execute()和Server.Transfer() Redirect()方法盡管在服務器端執(zhí)行,但重定向實際發(fā)生在客戶端,可從瀏覽器地址欄中看到地址變化;而Execut
10、e()和Transfer()方法的重定向實際發(fā)生在服務器端,在瀏覽器的地址欄中看不到地址變化。Redirect()和Transfer()方法執(zhí)行完新網頁后,并不返回原網頁;而Execute()方法執(zhí)行完新網頁后會返回原網頁繼續(xù)執(zhí)行。20區(qū)分Response.Redirect()、Server.Execute()和Server.Transfer() (續(xù))Redirect()方法可重定向到同一網站的不同網頁,也可重定向到其它網站的網頁;而Execute()和Transfer()方法只能重定向到同一網站的不同網頁。利用Redirect()方法在不同網頁之間傳遞數據時,狀態(tài)管理采用查詢字符串形式;而
11、Execute()和Transfer()方法的狀態(tài)管理方式與Button按鈕的跨網頁提交方式相同。 21實例6-5 HttpServerUtility對象應用 Server.HtmlEncode()方法常用于在頁面輸出XHTML元素,若直接輸出,瀏覽器會將這些XHTML元素解釋輸出。Server.UrlEncode()常用于處理鏈接地址,如地址中包含空格等。單擊“Student.aspx鏈接”時將丟失“張”后面的信息。單擊“Student.aspx(UrlEncode)鏈接”時,因使用了Server.UrlEncode()方法不再丟失“張”后面的信息。源程序:Server.aspx 226.4
12、 跨網頁提交 要實現頁面重定向,在ASP.NET 3.5網頁中可以采用元素、HyperLink控件、Response.Redirect()、Server.Execute()和Server.Transfer()方法。 利用Button類型控件方式實現跨網頁提交,這種方式設置方便并具有安全的狀態(tài)管理功能。 236.4 跨網頁提交(續(xù))在實現跨網頁提交時,需要將源網頁上Button類型控件的屬性PostBackUrl值設置為目標網頁路徑。而在目標頁上,需要在頁面頭部添加PreviousPageType指令,設置屬性VirtualPath值為源網頁路徑,如:246.4 跨網頁提交(續(xù))從目標網頁訪問源
13、網頁中數據的方法利用PreviousPage.FindControl()方法訪問源網頁上的控件;在源網頁上定義公共屬性,再在目標網頁上利用“PreviousPage.屬性名”獲取源網頁中數據。 25區(qū)分跨網頁提交還是調用了Server.Execute()或Server.Transfer()方法 需要在目標網頁的.cs文件中判斷屬性PreviousPage. IsCrossPagePostBack的值。如果是跨網頁提交,那么屬性IsCrossPagePostBack值為true;如果是調用Server.Execute()或Server.Tranfer()方法,那么屬性IsCrossPageBac
14、k值為false。 26實例6-6 跨網頁提交應用在Cross1.aspx中輸入“用戶名、密碼”后單擊“確定”,此時頁面提交到Cross2.aspx,在該頁面中顯示Cross1.aspx中輸入的數據信息。 源程序:Cross1.aspx 源程序:Cross2.aspx276.5 狀態(tài)管理 客戶端狀態(tài)是將信息保留在客戶端計算機上,當客戶端向服務器端發(fā)送請求時,狀態(tài)信息會隨之發(fā)送到服務器端。具體實現時可選擇ViewState、ControlState、HiddenField、Cookie和前面提及的查詢字符串,其中ControlState只能用于自定義控件的狀態(tài)管理。服務器狀態(tài)是指狀態(tài)的信息保存于
15、服務器。具體實現時可選擇Session狀態(tài)、Application狀態(tài)或數據庫支持。 28比較客戶端狀態(tài)和服務器端狀態(tài)客戶端狀態(tài)由于狀態(tài)數據保存在客戶端,所以不消耗服務器內存資源,但容易泄露數據信息,安全性較差。服務器端狀態(tài)將消耗服務器端內存資源,但具有較高的安全性。 296.5.1 ViewState又稱為視圖狀態(tài),用于維護自身Web窗體的狀態(tài)。當用戶請求ASP.NET網頁時,ASP.NET將ViewState封裝為一個或幾個隱藏的表單域傳遞到客戶端。當用戶再次提交網頁時,ViewState也將被提交到服務器端。這樣后續(xù)的請求就可以獲得上一次請求時的狀態(tài)。選擇“查看”“源文件”可查看View
16、State。 306.5.1 ViewState (續(xù))禁用ViewState:屬性EnableViewState設置為false 。禁止整個網頁的ViewState:使用Page指令。316.5.2 HiddenField控件又稱隱藏域,用于維護自身窗體的狀態(tài),它不會顯示在用戶的瀏覽器中,但可以像設置標準控件的屬性那樣設置其屬性。成員主要有屬性Value和事件ValueChanged。注意:要觸發(fā)ValueChanged事件,需設置HiddenField控件的屬性EnableViewState值為false。 326.5.3 Cookie保存到客戶端硬盤或內存中的一小段文本信息,如站點、客戶
17、、會話等有關的信息。 與網站關聯(lián),而不是與特定的網頁關聯(lián)。 用戶訪問不同站點時,各個站點都可能會向用戶的瀏覽器發(fā)送一個Cookie,瀏覽器會分別存儲所有的Cookie。 可以在客戶端修改Cookie設置和禁用Cookie。 336.5.3 Cookie(續(xù))當用戶的瀏覽器關閉對Cookie的支持,而不能有效地識別用戶時,只需在web.config中加入以下語句: Cookie文本文件存儲于“盤符: Documents and SettingsCookies”文件夾 。ASP.NET提供System.Web.HttpCookie類來處理Cookie,常用的屬性是Value和Expires。 34
18、6.5.3 Cookie(續(xù))每個Cookie一般都會有一個有效期限,當用戶訪問網站時,瀏覽器會自動刪除過期的Cookie。沒有設置有效期的Cookie將不會保存到硬盤文件中,而是作為用戶會話信息的一部分。當用戶關閉瀏覽器時,Cookie就會被丟棄。這種類型的Cookie很適合用來保存只需短時間存儲的信息,或者保存由于安全原因不應寫入客戶端硬盤文件的信息。 356.5.3 Cookie(續(xù))使用Response.Cookies數據集合建立Cookie。Response.CookiesName.Value=“張三”;也可以先創(chuàng)建HttpCookie對象,設置其屬性,然后通過Response.Co
19、okies.Add()方法添加。HttpCookie cookie = new HttpCookie(Name);cookie.Value = 張三;cookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(cookie);使用Request.Cookies數據集合獲取Cookie值。string name=Request.Cookies.Name.Value; 36實例6-7 Cookie應用本實例主要實現利用Cookie確認用戶是否已登錄,其中Cookie.aspx頁面只有在用戶登錄后才能顯示。 源程序:Cookie.asp
20、x 源程序:CookieLogin.aspx 程序說明:測試時先瀏覽Cookie.aspx,此時因無用戶名Cookie信息,頁面重定向到CookieLogin.aspx,輸入用戶名單擊確定將用戶名信息存入Cookie。關閉瀏覽器。再次瀏覽Cookie.aspx可看到歡迎信息。376.5.4 Session又稱會話狀態(tài),典型的應用有儲存用戶信息、多網頁間信息傳遞、購物車等。Session產生在服務器端,只能為當前訪問的用戶服務。以用戶對網站的最后一次訪問開始計時,當計時達到會話設定時間并且期間沒有訪問操作時,則會話自動結束。如果同一個用戶在瀏覽期間關閉瀏覽器后再訪問同一個網頁,服務器會為該用戶產
21、生新的Session。 386.5.4 Session (續(xù))ASP.NET用一個唯一的120位Session ID來標識每一個會話。若客戶端支持Cookie,ASP.NET會將Session ID保存到相應的Cookie中;若不支持,就將Session ID添加到URL中。注意:不管Session ID保存在Cookie還是添加在URL中,都是明文。如果需要保護Session ID,可考慮采用SSL通信。Session由System.Web.HttpSessionState類實現,使用時,常直接通過Page類的Session屬性訪問HttpSessionState類的實例。 39 HttpS
22、essionState常用的屬性、方法和事件表 Contents屬性獲取對當前會話狀態(tài)對象的引用。IsCookieless屬性邏輯值,確定Session ID嵌入在 URL 中還是存儲在Cookie中。true表示存儲在Cookie中。IsNewSession屬性邏輯值,true表示是與當前請求一起創(chuàng)建的。Mode屬性獲取當前會話狀態(tài)的模式。SessionID屬性獲取會話的唯一標識ID。Timeout屬性獲取或設置會話狀態(tài)持續(xù)時間,單位為分鐘,默認為20分鐘。Abandon方法取消當前會話。Remove方法刪除會話狀態(tài)集合中的項。Session_Start事件用戶請求網頁時觸發(fā),相應的事件代碼
23、包含于Global.asax文件中。Session_End事件用戶會話結束時觸發(fā),相應的事件代碼包含于Global.asax文件中。406.5.4 Session (續(xù))只有在 web.config 文件中的 sessionstate 模式設置為InProc時,才會引發(fā)Session_End事件。如果會話模式設置為StateServer或SQLServer,則不會引發(fā)該事件。對Session狀態(tài)的賦值:SessionName=張三;Session.ContentsName=張三; 注意:Session使用的名稱不區(qū)分大小寫,因此不要用大小寫區(qū)分不同變量。41Session狀態(tài)的存儲方式 可以在
24、web.config中通過元素的mode屬性來指定,共有Off、InProc、StateServer、SQLServer和Custom五個枚舉值供選擇,分別代表禁用、進程內、獨立的狀態(tài)服務、SQLServer和自定義數據存儲。在實際工程項目中,一般選擇StateServer,而對于大型網站常選用SQLServer。 42某考試系統(tǒng)的Session狀態(tài)設置 43實例6-8 Session應用本實例能保護某些網頁,如要進入Session.aspx頁面,則首先要通過登錄認證。 源程序:Session.aspx 程序說明:當用戶直接訪問Session.aspx時,會判斷SessionName狀態(tài)值,若
25、為空則重定向到SessionLogin.aspx,否則顯示歡迎信息。在SessionLogin.aspx中用戶登錄成功后,將建立SessionName狀態(tài)值。此時要測試是否存在SessionName狀態(tài)值,應在打開SessionLogin.aspx頁面的瀏覽器中直接更改地址來訪問Session.aspx。446.5.5 Application又稱應用程序狀態(tài),與應用于單個用戶的Session狀態(tài)不同,它應用于所有的用戶。 在網站運行時存在,網站關閉時將被釋放。因此,如果需要將狀態(tài)數據保存下來,則適宜保存在數據庫中。 由System.Web.HttpApplicationState類來實現。 4
26、56.5.5 Application(續(xù))Application是面對所有用戶的,當要修改Application狀態(tài)值時,首先要調用Application.Lock()方法鎖定,值修改后再調用Application.UnLock()方法解除鎖定。 Application.Lock();ApplicationCount = (int)ApplicationCount + 1;Application.UnLock(); 與Application相關的事件主要有Application_Start、Application_End、Application_Error與Session類似,這些事件代碼都存
27、放于Global.asax文件中。 46實例6-9 統(tǒng)計網站在線人數 頁面呈現網站在線人數。需考慮3個方面:初始化計數器;當一個用戶訪問網站時,計數器增1;當一個用戶離開網站時,計數器減1。初始化計數器要利用Application_Start事件,并在事件代碼中定義Application狀態(tài)。用戶訪問網站時增加計數要利用Session_Start事件,并在事件代碼中增加Application狀態(tài)值。用戶離開網站時減少計數要利用Session_End事件,并在事件代碼中減小Application狀態(tài)值。源程序:Global.asax、Application.aspx 47程序說明可同時利用多個瀏覽器或多臺計算機訪問Application.aspx,進行測試。當然,若通過多臺計算機進行測試,需要先將網站發(fā)布到IIS。注意:Session_End事件是在會話結束時觸發(fā),所以關閉瀏覽器不會立即觸發(fā)該事件,只有到達屬性Timeout
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 柳州職業(yè)技術學院《動畫劇本與分鏡設計》2023-2024學年第一學期期末試卷
- 江西中醫(yī)藥大學《畫法幾何與土建制圖》2023-2024學年第一學期期末試卷
- 新蘇教版一年級下冊數學第1單元第1課時《9加幾》教案
- 華僑大學《思想道德修養(yǎng)》2023-2024學年第一學期期末試卷
- 湖北科技職業(yè)學院《Web應用與開發(fā)》2023-2024學年第一學期期末試卷
- 河南中醫(yī)藥大學《音樂基礎理論2》2023-2024學年第一學期期末試卷
- 重慶輕工職業(yè)學院《辦公空間設計》2023-2024學年第一學期期末試卷
- 駐馬店職業(yè)技術學院《馬克思主義中國化》2023-2024學年第一學期期末試卷
- 浙江萬里學院《金融風險分析師(FRM)專題(雙語)》2023-2024學年第一學期期末試卷
- 浙江工貿職業(yè)技術學院《證券投資常識》2023-2024學年第一學期期末試卷
- 通用卡尺檢定規(guī)程
- 臨床療效總評量表(CGI)
- 美世國際職位評估體系IPE3.0使用手冊
- 2020電網檢修工程預算定額第五冊 通信工程
- 圖像超分辨率增強技術
- 集裝箱貨運碼頭的火災防范措施
- 七年級數學上冊專題1.14數軸與絕對值綜合問題大題專練(重難點培優(yōu))-【講練課堂】2022-2023學年七年級數學上冊尖子生同步培優(yōu)題典(原卷版)【人教版】
- 社會保險職工增減表
- 小學語文低年級寫話 鴿子
- 仁愛英語八年級上冊詞匯練習題全冊
- 報價單模板及范文(通用十二篇)
評論
0/150
提交評論