版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第6章HTTP請(qǐng)求、響應(yīng)及狀態(tài)管理2本章要點(diǎn):掌握HttpRequest對(duì)象的應(yīng)用掌握HttpResponse對(duì)象的應(yīng)用掌握HttpServerUtility對(duì)象的應(yīng)用,理解不同方法的頁(yè)面重定向掌握跨頁(yè)面提交的應(yīng)用掌握Cookie、Session、Application、Profile應(yīng)用3目錄6.1HTTP請(qǐng)求6.2HTTP響應(yīng)6.3HttpServerUtility6.4跨網(wǎng)頁(yè)提交4目錄6.5狀態(tài)管理6.5.1ViewState6.5.2HiddenField控件6.5.3Cookie6.5.4Session6.5.5Application6.5.6Profile6.6小結(jié)56.1HTTP請(qǐng)求(Request對(duì)象)Request對(duì)象從System.web命名空間中的HttpRequest類派生,它封裝了HTTP請(qǐng)求信息。Request能很好地控制請(qǐng)求數(shù)據(jù),如訪問(wèn)客戶端的瀏覽器信息、查詢字符串、Cookie等信息。6Request對(duì)象的功能主要工作:從客戶端獲取信息,包括瀏覽器的種類,用戶輸入在表單中的數(shù)據(jù)。通過(guò)其QueryString屬性獲取從查詢字符串中由用戶提交的數(shù)據(jù)。7HttpRequest對(duì)象的數(shù)據(jù)集合對(duì)應(yīng)表數(shù)據(jù)集合說(shuō)明QueryString從查詢字符串中讀取用戶提交的數(shù)據(jù)。Cookies獲得客戶端的Cookies數(shù)據(jù)。ServerVariables獲得服務(wù)器端或客戶端環(huán)境變量信息。ClientCertificate獲得客戶端的身份驗(yàn)證信息。Browser獲得客戶端瀏覽器信息。獲取HttpRequest對(duì)象的Browser數(shù)據(jù)集合的語(yǔ)法格式:Request.Browser。8.aspx頁(yè)面間傳值從一個(gè)網(wǎng)頁(yè)鏈接到另一個(gè)網(wǎng)頁(yè)時(shí),可能需要傳遞一些數(shù)據(jù)到另一個(gè)網(wǎng)頁(yè)。一般采用如下格式:
URL?數(shù)據(jù)名稱=數(shù)據(jù)值&數(shù)據(jù)名稱=數(shù)據(jù)值……
其中?表示URL后邊要傳遞數(shù)據(jù),數(shù)據(jù)傳遞的格式為:數(shù)據(jù)名稱=數(shù)據(jù)值,兩個(gè)數(shù)據(jù)之間用&分割。當(dāng)數(shù)據(jù)傳遞到另一個(gè)網(wǎng)頁(yè)時(shí),另一個(gè)網(wǎng)頁(yè)用Request.QueryString[“數(shù)據(jù)名稱”]的方法取出這個(gè)數(shù)據(jù)。9
stringusername=TextBox1.Text;Response.Redirect("welcome.aspx?name="+username);
接收頁(yè)面:
stringstr=Request.QueryString[“name"]傳值變量10實(shí)例6-1QueryString的使用當(dāng)單擊QueryString1.aspx頁(yè)面上鏈接后,頁(yè)面重定向到QueryString2.aspx;在頁(yè)面QueryString2.aspx中顯示從QueryString1.aspx傳遞過(guò)來(lái)的查詢字符串?dāng)?shù)據(jù)信息。源程序:QueryString1.aspx源程序:QueryString2.aspx11ServerVariables數(shù)據(jù)集合可很方便地取得服務(wù)器端或客戶端的環(huán)境變量信息,如客戶端的IP地址等。語(yǔ)法格式如下:
Request.ServerVariables["環(huán)境變量名"]12常用的環(huán)境變量表環(huán)境變量名說(shuō)明CONTENT_LENGTH發(fā)送到客戶端的文件長(zhǎng)度。CONTENT_TYPE發(fā)送到客戶端的文件類型。LOCAL_ADDR服務(wù)器端的IP地址。REMOTE_ADDR客戶端IP地址。REMOTE_HOST客戶端計(jì)算機(jī)名。SERVER_NAME服務(wù)器端計(jì)算機(jī)名。SERVER_PORT服務(wù)器端網(wǎng)站的端口號(hào)。13Browser數(shù)據(jù)集合用于判斷用戶的瀏覽器類型、版本等,以便根據(jù)不同的瀏覽器編寫不同的網(wǎng)頁(yè)。語(yǔ)法格式為:
Request.Browser["瀏覽器特性名"]。14瀏覽器特性名對(duì)應(yīng)表名稱說(shuō)明Browser瀏覽器類型。Version瀏覽器版本號(hào)。MajorVersion瀏覽器主版本號(hào)。MinorVersion瀏覽器次版本號(hào)。Frames邏輯值,true表示支持框架功能。Cookies邏輯值,true表示支持Cookie。。JavaScript邏輯值,true表示支持JavaScript。ActiveXControls邏輯值,true表示支持ActiveXControl控件。15實(shí)例6-2ServerVariables和Browser應(yīng)用界面顯示信息為ServerVariables和Brower數(shù)據(jù)集合中相應(yīng)值。源程序:Request.aspx
166.2HTTP響應(yīng)(Response對(duì)象)Response對(duì)象是從System.Web命名空間中的HttpResponse類派生而來(lái)。Response對(duì)象用于回應(yīng)客戶瀏覽器,可以輸出信息到客戶端,包括直接發(fā)送信息給瀏覽器、重定向?yàn)g覽器到另一個(gè)URL,保存Cookie等。17輸出數(shù)據(jù)跳轉(zhuǎn)頁(yè)面?zhèn)鬟f參數(shù)輸出文件Response對(duì)象的功能18HttpResponse對(duì)象的常用屬性和方法表Buffer屬性邏輯值,true表示先輸出到緩沖區(qū),在處理完整個(gè)響應(yīng)后再將數(shù)據(jù)輸出到客戶端瀏覽器;false表示直接將信息輸出到客戶端瀏覽器Clear()當(dāng)屬性Buffer值為true時(shí),Response.Clear()表示清除緩沖區(qū)中數(shù)據(jù)信息End()終止ASP.NET應(yīng)用程序的執(zhí)行Flush()立刻輸出緩沖區(qū)中的網(wǎng)頁(yè)Redirect()頁(yè)面重定向,可通過(guò)URL附加查詢字符串在不同網(wǎng)頁(yè)之間傳遞數(shù)據(jù)Write()在頁(yè)面上輸出信息WriteFile(filename)將filename指定的文件寫入HTTP內(nèi)容輸出流AppendToLog()將自定義日志信息添加到IIS日志文件中19Response對(duì)象的常用方法
(1)使用Write方法
使用Response對(duì)象的Write方法可以將信息寫入HTML輸出內(nèi)容流。Write方法的語(yǔ)法格式如下:
Response.Write(string);string可以是字符串常量,字符串變量,也可以是包含<script>和</script>說(shuō)明的腳本語(yǔ)言Response.Write("<ahref=''>訪問(wèn)網(wǎng)易</a><br>");
//向?yàn)g覽器寫入帶有超鏈接的文字信息Response.Write("<ahref='javascript:window.opener=null;window.close()'>關(guān)閉窗口</a>");
//向?yàn)g覽器寫入帶有腳本的文字信息Response.Write("<script>alert('用戶名或密碼錯(cuò)');</script>");a和href屬性:HTML用<a>來(lái)表示超鏈接,格式:<ahref=‘url’>鏈接的顯示文字</a>20
Response.Write("歡迎光臨");Response.End();Response.Write("我的網(wǎng)站");(2)使用Response.End()方法當(dāng)執(zhí)行到Response.End()語(yǔ)句時(shí),對(duì)程序代碼的執(zhí)行將會(huì)立即終止,緩沖區(qū)中現(xiàn)有的內(nèi)容將全部被輸出到瀏覽器上。同時(shí),在End()方法之后的語(yǔ)句都將得不到執(zhí)行。21(3)使用Response.Redirect()方法利用Response對(duì)象的Redirect可以自動(dòng)引導(dǎo)客戶至另一個(gè)頁(yè)面,將客戶端定位到新URL。Redirect()方法之后的語(yǔ)句完全沒(méi)有執(zhí)行的機(jī)會(huì)。語(yǔ)法:
Response.Redirect("URL");Redirect()方法說(shuō)明:使用該方法實(shí)現(xiàn)跳轉(zhuǎn)時(shí),瀏覽器地址欄顯示目標(biāo)URL;執(zhí)行該方法時(shí),重定向操作發(fā)生在客戶端,涉及兩個(gè)不同頁(yè)面或兩個(gè)Web服務(wù)器之間的通信,第一階段是對(duì)原頁(yè)面的請(qǐng)求,第二階段是對(duì)目標(biāo)URL的請(qǐng)求;該方法執(zhí)行后內(nèi)部控件保存的信息將丟失,若要從A頁(yè)面?zhèn)鬟f數(shù)據(jù)到B頁(yè)面,可以通過(guò)URL參數(shù)中的“?”來(lái)傳遞。
例:用LinkButton控件,要求按照用戶輸入的地址,將用戶引導(dǎo)至相應(yīng)的網(wǎng)站。Response對(duì)象23Response對(duì)象(4)WriteFile方法使用該方法可將指定的文件直接寫入HTML內(nèi)容輸出流,語(yǔ)法為:Response.WriteFile(filename);filename為文件的名稱及路徑//文件的路徑stringpath=Server.MapPath("DownLoad\\實(shí)驗(yàn)六.doc");//創(chuàng)建當(dāng)前路徑中文件的一個(gè)實(shí)例FileInfofile=newFileInfo(path);Response.Clear();//設(shè)置輸出的編碼Response.ContentEncoding=System.Text.Encoding.UTF8;//添加頭信息,為"文件下載/另存為"對(duì)話框指定默認(rèn)文件名Response.AddHeader("Content-Disposition","attachment;filename="+Server.UrlEncode(file.Name));//添加頭信息,指定文件大小,讓瀏覽器能夠顯示下載進(jìn)度Response.AddHeader("Content-Length",file.Length.ToString());//指定文件類型Response.ContentType="application/octet-stream";Response.WriteFile(file.FullName);//把文件流發(fā)送到客戶端24實(shí)例6-3Write()方法應(yīng)用利用Write()方法除可以輸出提示信息、變量值外,也可以輸出XHTML文本或JavaScript腳本等。源程序:Write.aspx
25實(shí)例6-4Redirect()方法應(yīng)用選擇“教師”后,頁(yè)面重定向到教師頁(yè)面Teacher.aspx面,選擇“學(xué)生”后頁(yè)面重定向到學(xué)生頁(yè)面Student.aspx。源程序:Redirect.aspx
源程序:Teacher.aspx
266.3HttpServerUtilityPage類的屬性Server(即HttpServerUtility對(duì)象)封裝了服務(wù)器端的一些操作,如轉(zhuǎn)換XHTML元素標(biāo)志、獲取網(wǎng)頁(yè)的物理路徑等。27HttpServerUtility對(duì)象的常用屬性和方法表ScriptTimeout屬性獲取和設(shè)置請(qǐng)求超時(shí)值,如:Server.ScriptTimeout=60;//設(shè)置最長(zhǎng)時(shí)間為60秒Execute()停止執(zhí)行當(dāng)前網(wǎng)頁(yè),轉(zhuǎn)到新的網(wǎng)頁(yè)執(zhí)行,執(zhí)行完畢后返回到原網(wǎng)頁(yè),繼續(xù)執(zhí)行后續(xù)語(yǔ)句。HtmlEncode()將字符串中的XHTML元素標(biāo)記轉(zhuǎn)換為字符實(shí)體,如將“<”轉(zhuǎn)換為<。HtmlDecode()與HtmlEncode作用相反。
MapPath()獲取網(wǎng)頁(yè)的物理路徑。Transfer()停止執(zhí)行當(dāng)前網(wǎng)頁(yè),轉(zhuǎn)到新的網(wǎng)頁(yè)執(zhí)行,執(zhí)行完畢后不再返回原網(wǎng)頁(yè)。UrlEncode()將字符串中某些特殊字符轉(zhuǎn)換為URL編碼,如將“/”轉(zhuǎn)換為“%2f”,空格轉(zhuǎn)換為“+”等。UrlDecode()與UrlEncode作用相反。28
MapPath方法Web應(yīng)用程序執(zhí)行時(shí)需要訪問(wèn)存放在服務(wù)器中的某一文件,此時(shí)需要將文件的虛擬路徑轉(zhuǎn)換成服務(wù)器端對(duì)應(yīng)的物理路徑。MapPath方法可以實(shí)現(xiàn)將虛擬路徑轉(zhuǎn)化為物理路徑。其語(yǔ)法如下:
Server.MapPath(文件的虛擬路徑);Server對(duì)象例:使用Server對(duì)象的MapPath方法獲取站點(diǎn)的根路徑及虛擬目錄對(duì)應(yīng)的物理路徑。Response.Write("當(dāng)前站點(diǎn)的根目錄為:"+Server.MapPath("~")+"<br>");Response.Write("當(dāng)前虛擬目錄的物理路徑為:"+Server.MapPath("DownLoad")+"<br>");Response.Write("當(dāng)前頁(yè)面的物理路徑為:"+Server.MapPath("default.aspx"));29FileUpload控件使用方法1.先獲取客戶端使用FileUpload控件上載的文件名稱語(yǔ)句:
stringfilename=FileUpload1.FileName;
2.得到文件上傳到的文件夾在服務(wù)器端的物理路徑。3.保存客戶端文件到服務(wù)器指定文件夾。使用:
控件名.SaveAs()30具體實(shí)現(xiàn)上傳的代碼如下:stringfilename=FileUpload1.FileName;stringpath=Server.MapPath("upload");//取得upload文件夾在服務(wù)器端的物理路徑FileUpload1.SaveAs(path+"\\"+filename);31區(qū)分Response.Redirect()、Server.Execute()和Server.Transfer()Redirect()方法盡管在服務(wù)器端執(zhí)行,但重定向?qū)嶋H發(fā)生在客戶端,可從瀏覽器地址欄中看到地址變化;而Execute()和Transfer()方法的重定向?qū)嶋H發(fā)生在服務(wù)器端,在瀏覽器的地址欄中看不到地址變化。Redirect()和Transfer()方法執(zhí)行完新網(wǎng)頁(yè)后,并不返回原網(wǎng)頁(yè);而Execute()方法執(zhí)行完新網(wǎng)頁(yè)后會(huì)返回原網(wǎng)頁(yè)繼續(xù)執(zhí)行。32區(qū)分Response.Redirect()、Server.Execute()和Server.Transfer()(續(xù))Redirect()方法可重定向到同一網(wǎng)站的不同網(wǎng)頁(yè),也可重定向到其它網(wǎng)站的網(wǎng)頁(yè);而Execute()和Transfer()方法只能重定向到同一網(wǎng)站的不同網(wǎng)頁(yè)。利用Redirect()方法在不同網(wǎng)頁(yè)之間傳遞數(shù)據(jù)時(shí),狀態(tài)管理采用查詢字符串形式;而Execute()和Transfer()方法的狀態(tài)管理方式與Button按鈕的跨網(wǎng)頁(yè)提交方式相同。33實(shí)例6-5HttpServerUtility對(duì)象應(yīng)用Server.HtmlEncode()方法常用于在頁(yè)面輸出XHTML元素,若直接輸出,瀏覽器會(huì)將這些XHTML元素解釋輸出。Server.UrlEncode()常用于處理鏈接地址,如地址中包含空格等。單擊“Student.aspx鏈接”時(shí)將丟失“張”后面的信息。單擊“Student.aspx(UrlEncode)鏈接”時(shí),因使用了Server.UrlEncode()方法不再丟失“張”后面的信息。源程序:Server.aspx
34能將HTML標(biāo)記當(dāng)做純文本輸出,而不再看做HTML標(biāo)記HtmlEncode方法當(dāng)需要輸出HTML標(biāo)記本身(如需用瀏覽器輸出HTML教程)的時(shí)候,可以使用Server.HtmlEncode方法,它可以將字符串中的HTML標(biāo)記字符串轉(zhuǎn)換為字符實(shí)體輸出。35
ScriptTimeout屬性當(dāng)服務(wù)器端的某些應(yīng)用程序陷入了死循環(huán),或者服務(wù)器過(guò)載時(shí),用戶不可能一直等待頁(yè)面顯示,這時(shí),需要一個(gè)屬性來(lái)限制腳本文件的執(zhí)行時(shí)間,ScriptTimeout就是這樣一個(gè)屬性,它的默認(rèn)值為90秒。超過(guò)90秒,該頁(yè)面將表示為“該頁(yè)無(wú)法顯示”。修改ScriptTimeout屬性的語(yǔ)法如下:Server.ScriptTimeout=時(shí)間(單位為秒);Server對(duì)象366.4跨網(wǎng)頁(yè)提交要實(shí)現(xiàn)頁(yè)面重定向,在ASP.NET3.5網(wǎng)頁(yè)中可以采用<a>元素、HyperLink控件、Response.Redirect()、Server.Execute()和Server.Transfer()方法。利用Button類型控件方式實(shí)現(xiàn)跨網(wǎng)頁(yè)提交,這種方式設(shè)置方便并具有安全的狀態(tài)管理功能。376.4跨網(wǎng)頁(yè)提交(續(xù))在實(shí)現(xiàn)跨網(wǎng)頁(yè)提交時(shí),需要將源網(wǎng)頁(yè)上Button類型控件的屬性PostBackUrl值設(shè)置為目標(biāo)網(wǎng)頁(yè)路徑。而在目標(biāo)頁(yè)上,需要在頁(yè)面頭部添加PreviousPageType指令,設(shè)置屬性VirtualPath值為源網(wǎng)頁(yè)路徑,如: <%@PreviousPageType
VirtualPath="~/chap6/Cross1.aspx"%>386.4跨網(wǎng)頁(yè)提交(續(xù))從目標(biāo)網(wǎng)頁(yè)訪問(wèn)源網(wǎng)頁(yè)中數(shù)據(jù)的方法利用PreviousPage.FindControl()方法訪問(wèn)源網(wǎng)頁(yè)上的控件;在源網(wǎng)頁(yè)上定義公共屬性,再在目標(biāo)網(wǎng)頁(yè)上利用“PreviousPage.屬性名”獲取源網(wǎng)頁(yè)中數(shù)據(jù)。39區(qū)分跨網(wǎng)頁(yè)提交還是調(diào)用了Server.Execute()或Server.Transfer()方法需要在目標(biāo)網(wǎng)頁(yè)的.cs文件中判斷屬性PreviousPage.IsCrossPagePostBack的值。如果是跨網(wǎng)頁(yè)提交,那么屬性IsCrossPagePostBack值為true;如果是調(diào)用Server.Execute()或Server.Tranfer()方法,那么屬性IsCrossPageBack值為false。40實(shí)例6-6跨網(wǎng)頁(yè)提交應(yīng)用在Cross1.aspx中輸入“用戶名、密碼”后單擊“確定”,此時(shí)頁(yè)面提交到Cross2.aspx,在該頁(yè)面中顯示Cross1.aspx中輸入的數(shù)據(jù)信息。源程序:Cross1.aspx源程序:Cross2.aspx416.5狀態(tài)管理客戶端狀態(tài)是將信息保留在客戶端計(jì)算機(jī)上,當(dāng)客戶端向服務(wù)器端發(fā)送請(qǐng)求時(shí),狀態(tài)信息會(huì)隨之發(fā)送到服務(wù)器端。具體實(shí)現(xiàn)時(shí)可選擇ViewState、HiddenField、Cookie和前面提及的查詢字符串。服務(wù)器狀態(tài)是指狀態(tài)的信息保存于服務(wù)器。具體實(shí)現(xiàn)時(shí)可選擇Session狀態(tài)、Application狀態(tài)或數(shù)據(jù)庫(kù)支持。42比較客戶端狀態(tài)和服務(wù)器端狀態(tài)客戶端狀態(tài)由于狀態(tài)數(shù)據(jù)保存在客戶端,所以不消耗服務(wù)器內(nèi)存資源,但容易泄露數(shù)據(jù)信息,安全性較差。服務(wù)器端狀態(tài)將消耗服務(wù)器端內(nèi)存資源,但具有較高的安全性。Cookie的工作原理可以通過(guò)訪問(wèn)網(wǎng)站的過(guò)程來(lái)說(shuō)明:假設(shè)用戶請(qǐng)求訪問(wèn)網(wǎng)站上的某個(gè)頁(yè)面時(shí),應(yīng)用程序發(fā)送給該用戶的不僅僅只有一個(gè)頁(yè)面,還有一個(gè)包含日期和時(shí)間信息的Cookie,用戶的瀏覽器在獲得頁(yè)面的同時(shí)還得到了這個(gè)Cookie,并把它保存在用戶硬盤上某個(gè)文件夾中。以后,如果該用戶再次訪問(wèn)該網(wǎng)站上的頁(yè)面,當(dāng)用戶輸入時(shí),瀏覽器就將它與頁(yè)面請(qǐng)求一起發(fā)送到網(wǎng)站,應(yīng)用程序就能讀取Cookie信息,從而能確定該用戶上一次訪問(wèn)網(wǎng)站的日期和時(shí)間。程序可以根據(jù)這些信息向用戶輸出相應(yīng)的消息。Cookie是與Web站點(diǎn)而不是與具體頁(yè)面關(guān)聯(lián)的,所以無(wú)論用戶請(qǐng)求瀏覽網(wǎng)站中的哪個(gè)頁(yè)面,瀏覽器和服務(wù)器都將交換的Cookie信息。用戶訪問(wèn)其他網(wǎng)站時(shí),每個(gè)網(wǎng)站都可能會(huì)向用戶瀏覽器發(fā)送一些Cookie,而瀏覽器會(huì)將所有這些Cookie分別保存。6.5.1Cookie44Cookie是一小段文本信息,伴隨著用戶請(qǐng)求和頁(yè)面在Web服務(wù)器和瀏覽器之間傳遞。用戶每次訪問(wèn)站點(diǎn)時(shí),Web應(yīng)用程序都可以讀取Cookie包含的信息。Cookie用來(lái)保存相關(guān)信息,但Cookie將信息保存在客戶端硬盤或內(nèi)存中,也就是說(shuō),無(wú)論何時(shí)用戶連接到服務(wù)器,Web站點(diǎn)都可以訪問(wèn)cookie信息。這樣,既方便用戶的使用,也方便了網(wǎng)站對(duì)用戶的管理。Cookie對(duì)象45ASP.NET提供System.Web.HttpCookie類來(lái)處理Cookie,常用的屬性是Value和Expires。與網(wǎng)站關(guān)聯(lián),而不是與特定的網(wǎng)頁(yè)關(guān)聯(lián)。用戶訪問(wèn)不同站點(diǎn)時(shí),各個(gè)站點(diǎn)都可能會(huì)向用戶的瀏覽器發(fā)送一個(gè)Cookie,瀏覽器會(huì)分別存儲(chǔ)所有的Cookie。Cookie文本文件存儲(chǔ)于“盤符:\DocumentsandSettings\<用戶名>\Cookies”文件夾。46每個(gè)Cookie一般都會(huì)有一個(gè)有效期限,當(dāng)用戶訪問(wèn)網(wǎng)站時(shí),瀏覽器會(huì)自動(dòng)刪除過(guò)期的Cookie。沒(méi)有設(shè)置有效期的Cookie將不會(huì)保存到硬盤文件中,而是作為用戶會(huì)話信息的一部分。當(dāng)用戶關(guān)閉瀏覽器時(shí),Cookie就會(huì)被丟棄。這種類型的Cookie很適合用來(lái)保存只需短時(shí)間存儲(chǔ)的信息,或者保存由于安全原因不應(yīng)寫入客戶端硬盤文件的信息。47使用Response.Cookies數(shù)據(jù)集合建立Cookie。
Response.Cookies["Name"].Value=“張三”;也可以先創(chuàng)建HttpCookie對(duì)象,設(shè)置其屬性,然后通過(guò)Response.Cookies.Add()方法添加。HttpCookiecookie=newHttpCookie("Name");
cookie.Value="張三";
cookie.Expires=DateTime.Now.AddDays(1);
Response.Cookies.Add(cookie);1.創(chuàng)建Cookie482.讀取Cookie使用Request.Cookies數(shù)據(jù)集合獲取Cookie值。 stringname=Request.Cookies.["Name"].Value;49實(shí)例6-7Cookie應(yīng)用本實(shí)例主要實(shí)現(xiàn)利用Cookie確認(rèn)用戶是否已登錄,其中Cookie.aspx頁(yè)面只有在用戶登錄后才能顯示。源程序:Cookie.aspx
源程序:CookieLogin.aspx
程序說(shuō)明:測(cè)試時(shí)先瀏覽Cookie.aspx,此時(shí)因無(wú)用戶名Cookie信息,頁(yè)面重定向到CookieLogin.aspx,輸入用戶名單擊確定將用戶名信息存入Cookie。關(guān)閉瀏覽器。再次瀏覽Cookie.aspx可看到歡迎信息。506.5.2
Application對(duì)象
Application對(duì)象是一個(gè)應(yīng)用程序級(jí)的對(duì)象,它包含的數(shù)據(jù)可以在整個(gè)Web站點(diǎn)中被所有用戶使用,并且可以在網(wǎng)站運(yùn)行期間持久地保存數(shù)據(jù)。Application是HttpApplicationState的一個(gè)實(shí)例,這個(gè)實(shí)例在一個(gè)應(yīng)用程序中只存在一個(gè),
Application創(chuàng)建于服務(wù)器第一次被請(qǐng)求時(shí)。作用:Application對(duì)象可以在給定的應(yīng)用程序的多個(gè)用戶之間共享信息,它是共有的對(duì)象(即所有用戶都可以對(duì)某個(gè)特定的Application對(duì)象進(jìn)行訪問(wèn))。51Application對(duì)象
使用Application,先添加一個(gè)asax文件,它的作用是初始化應(yīng)用程序級(jí)或會(huì)話級(jí)變量。
Application對(duì)象在實(shí)際網(wǎng)絡(luò)開(kāi)發(fā)中的用途就是記錄整個(gè)網(wǎng)絡(luò)的信息,如統(tǒng)計(jì)歷史訪問(wèn)人數(shù)、在線人數(shù)。52運(yùn)用Global.asax
文件—全局文件Global.asax必須存儲(chǔ)在站點(diǎn)的根目錄下,是應(yīng)用程序啟動(dòng)時(shí)被加載的第一個(gè)文件,用來(lái)處理應(yīng)用程序級(jí)別的事件。事件說(shuō)明Application_Start調(diào)用當(dāng)前應(yīng)用程序目錄(或其子目錄)下的第一個(gè)ASP.NET頁(yè)面時(shí)觸發(fā)。Application_End應(yīng)用程序的最后一個(gè)會(huì)話結(jié)束時(shí)觸發(fā)。用Internet服務(wù)管理器管理單元停止Web應(yīng)用程序時(shí)也會(huì)觸發(fā)Session_Start每次新的會(huì)話開(kāi)始時(shí)觸發(fā)Session_End會(huì)話結(jié)束時(shí)觸發(fā)。說(shuō)明:當(dāng)用戶在客戶端直接關(guān)閉瀏覽器退出Web應(yīng)用程序時(shí),并不會(huì)觸發(fā)Session_End事件,因?yàn)殛P(guān)閉瀏覽器的行為是一種典型的客戶端行為,是不會(huì)被通知到服務(wù)器端的。Session_End事件只有在服務(wù)器重新啟動(dòng)、用戶調(diào)用了Session_Abandon()方法或未執(zhí)行任何操作達(dá)到了Session.Timeout設(shè)置的值(超時(shí))時(shí)才會(huì)被觸發(fā)。53由于Application對(duì)象中存放的信息是共有的,有可能發(fā)生在同一時(shí)間內(nèi)多個(gè)用戶同時(shí)操作同一Application對(duì)象的情況,為了避免此類問(wèn)題導(dǎo)致的出錯(cuò),Application對(duì)象增加了Lock()方法和UnLock()兩個(gè)方法,用于更改Application對(duì)象值時(shí)將其鎖定,在更改完畢后再解除鎖定。
Application對(duì)象的常用方法
使用方法如下:Application.Lock();Application["變量名"]="變量值";Application.UnLock();54Application對(duì)象的常用事件Application對(duì)象的常用事件有如下兩個(gè):
1)Start事件:該事件在應(yīng)用程序啟動(dòng)時(shí)被觸發(fā)。
2)End事件:Application_End事件在應(yīng)用程序結(jié)束時(shí)被觸發(fā),即Web服務(wù)器關(guān)閉或重新啟動(dòng)時(shí)被觸發(fā)。55
1.向Application對(duì)象寫入數(shù)據(jù)
在向Application對(duì)象中保存數(shù)據(jù)時(shí)可使用如下所示的語(yǔ)法格式:
Application["對(duì)象名"]=對(duì)象值;
Application對(duì)象中的數(shù)據(jù)存取設(shè)置Application對(duì)象的count值為0:Application[“count”]=0;2.
修改Application對(duì)象中的數(shù)據(jù)
Application是面對(duì)所有用戶的,當(dāng)要修改Application狀態(tài)值時(shí),首先要調(diào)用Application.Lock()方法鎖定,值修改后再調(diào)用Application.UnLock()方法解除鎖定。修改Application對(duì)象中的count值,使其增1:Application.Lock();Application[“count"]=(int)Application[“count"]+1;Application.UnLock();563.讀取Application對(duì)象中的數(shù)據(jù)
讀取Application對(duì)象中數(shù)據(jù)的方法如下所示:
stringuser;
user=(String)Application("username);
注意:Application("對(duì)象名")的返回值是一個(gè)Object類型的數(shù)據(jù),操作時(shí)應(yīng)注意數(shù)據(jù)類型的轉(zhuǎn)換。
Application對(duì)象中的數(shù)據(jù)存取Response.AddHeader("Refresh","5");AddHeader()的作用是:將一個(gè)HTTP頭添加到輸出流第一個(gè)參數(shù)為:要添加的HTTP頭名稱。第二個(gè)參數(shù)為:要添加到頭中的字符串。
576.5.3Session
Session即會(huì)話,是指一個(gè)用戶在一段時(shí)間內(nèi)對(duì)某一個(gè)站點(diǎn)的一次訪問(wèn)。
Session對(duì)象在.NET中對(duì)應(yīng)HttpSessionState類,表示“會(huì)話狀態(tài)”,可以保存與當(dāng)前用戶會(huì)話相關(guān)的信息。
Session對(duì)象用于存儲(chǔ)從一個(gè)用戶開(kāi)始訪問(wèn)某個(gè)特定的aspx的頁(yè)面起,到用戶離開(kāi)為止,特定的用戶會(huì)話所需要的信息。用戶在應(yīng)用程序的頁(yè)面切換時(shí),Session對(duì)象的變量不會(huì)被清除。
581.Session的工作原理
當(dāng)用戶請(qǐng)求一個(gè)ASP.NET頁(yè)面時(shí),系統(tǒng)將自動(dòng)創(chuàng)建一個(gè)Session(會(huì)話),退出應(yīng)用程序或關(guān)閉服務(wù)器時(shí)該會(huì)話撤銷。系統(tǒng)在創(chuàng)建會(huì)話時(shí)將為其分配一個(gè)長(zhǎng)長(zhǎng)的字符串(SessionID)標(biāo)識(shí),以實(shí)現(xiàn)對(duì)會(huì)話進(jìn)行管理和跟蹤。SessionID具有的隨機(jī)性和惟一性保證了會(huì)話不會(huì)沖突,也不會(huì)被懷有惡意的人利用新SessionID推算出現(xiàn)有會(huì)話的SessionID。59Session對(duì)象常用的屬性、方法和事件表Contents屬性獲取對(duì)當(dāng)前會(huì)話狀態(tài)對(duì)象的引用。IsCookieless屬性邏輯值,確定SessionID嵌入在
URL中還是存儲(chǔ)在Cookie中。true表示存儲(chǔ)在Cookie中。IsNewSession屬性邏輯值,true表示是與當(dāng)前請(qǐng)求一起創(chuàng)建的。Mode屬性獲取當(dāng)前會(huì)話狀態(tài)的模式。SessionID屬性獲取會(huì)話的唯一標(biāo)識(shí)ID。Timeout屬性獲取或設(shè)置會(huì)話狀態(tài)持續(xù)時(shí)間,單位為分鐘,默認(rèn)為20分鐘。Abandon方法取消當(dāng)前會(huì)話。Remove方法刪除會(huì)話狀態(tài)集合中的項(xiàng)。Session_Start事件用戶請(qǐng)求網(wǎng)頁(yè)時(shí)觸發(fā),相應(yīng)的事件代碼包含于Global.asax文件中。Session_End事件用戶會(huì)話結(jié)束時(shí)觸發(fā),相應(yīng)的事件代碼包含于Global.asax文件中。602.向Session對(duì)象中存入數(shù)據(jù)
向Session對(duì)象中存入數(shù)據(jù)的方法十分簡(jiǎn)單,下面的語(yǔ)句使用戶單擊按鈕時(shí)將3個(gè)字符串分別存入2個(gè)Session對(duì)象和1個(gè)Application對(duì)象中。protectedvoidButton1_Click(objectsender,EventArgse){Session["myval1"]="這是Session傳遞的數(shù)據(jù)1";stringstrVal2="這是Session傳遞的數(shù)據(jù)2";Session["myval2"]=strVal2;}61Session對(duì)象3.從Session對(duì)象中取出數(shù)據(jù)
下面的語(yǔ)句表示了當(dāng)目標(biāo)頁(yè)面裝入時(shí)如何從Session對(duì)象中取出數(shù)據(jù)的方法。protectedvoidPage_Load(objectsender,EventArgse){Label1.Text=(string)(Session["myval1"]);Label2.Text=(string)(Session["myval2"]);}62只有在web.config
文件中的sessionstate
模式設(shè)置為InProc時(shí),才會(huì)引發(fā)Session_End事件。如果會(huì)話模式設(shè)置為StateServer或SQLServer,則不會(huì)引發(fā)該事件。對(duì)Session狀態(tài)的賦值:
Session["Name"]="張三";
Session.Contents["Name"]="張三";注意:Session使用的名稱不區(qū)分大小寫,因此不要用大小寫區(qū)分不同變量。63Session狀態(tài)的存儲(chǔ)方式可以在web.config中通過(guò)<SessionState>元素的mode屬性來(lái)指定,共有Off、InProc、StateServer、SQLServer和Custom五個(gè)枚舉值供選擇,分別代表禁用、進(jìn)程內(nèi)、獨(dú)立的狀態(tài)服務(wù)、SQLServer和自定義數(shù)據(jù)存儲(chǔ)。在實(shí)際工程項(xiàng)目中,一般選擇StateServer,而對(duì)于大型網(wǎng)站常選用SQLServer。64某考試系統(tǒng)的Session狀態(tài)設(shè)置<configuration><system.web><sessionStatemode="StateServer"stateConnectionString="tcpip=StateServerName:42424"cookieless="false"timeout="90"></sessionState></system.web></configuration>65實(shí)例6-8Session應(yīng)用本實(shí)例能保護(hù)某些網(wǎng)頁(yè),如要進(jìn)入Session.aspx頁(yè)面,則首先要通過(guò)登錄認(rèn)證。源程序:Session.aspx
程序說(shuō)明:當(dāng)用戶直接訪問(wèn)Session.aspx時(shí),會(huì)判斷Session["Name"]狀態(tài)值,若為空則重定向到SessionLogin.aspx,否則顯示歡迎信息。在SessionL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 共同購(gòu)買機(jī)械合同范本
- 農(nóng)機(jī)訂貨合同范例
- 個(gè)人門店雇傭個(gè)人合同范例
- 假發(fā)購(gòu)銷合同范例
- 專利 設(shè)備維修合同范例
- 冷飲作坊轉(zhuǎn)讓合同范本
- 企業(yè)政府項(xiàng)目合同范例
- 買地押金合同范例
- 中介店面轉(zhuǎn)讓合同范例
- 供應(yīng)商招聘合同范本
- ADA糖尿病醫(yī)學(xué)診療標(biāo)準(zhǔn)指南修訂要點(diǎn)解讀(2025)課件
- 健康管理-理論知識(shí)復(fù)習(xí)測(cè)試卷含答案
- 成人腦室外引流護(hù)理-中華護(hù)理學(xué)會(huì)團(tuán)體 標(biāo)準(zhǔn)
- JGJ106-建筑基樁檢測(cè)技術(shù)規(guī)范
- 高技能公共實(shí)訓(xùn)基地建設(shè)方案
- 市第一人民醫(yī)院“十四五”發(fā)展規(guī)劃(2020-2025)
- 2024年湖北孝達(dá)交通投資有限公司招聘筆試沖刺題(帶答案解析)
- 四年級(jí)上冊(cè)豎式計(jì)算100題及答案
- 小學(xué)英語(yǔ)跨學(xué)科案例設(shè)計(jì)
- 初中作業(yè)設(shè)計(jì)教師培訓(xùn)
- JTGT F20-2015 公路路面基層施工技術(shù)細(xì)則
評(píng)論
0/150
提交評(píng)論