版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1第6章HTTP請求、響應(yīng)及狀態(tài)管理2本章要點(diǎn):掌握HttpRequest對象的應(yīng)用掌握HttpResponse對象的應(yīng)用掌握HttpServerUtility對象的應(yīng)用,理解不同方法的頁面重定向掌握跨頁面提交的應(yīng)用。了解ViewState、HiddenField,掌握Cookie、Session、Application、Profile應(yīng)用。3目錄6.1HTTP請求6.2HTTP響應(yīng)6.3HttpServerUtility6.4跨網(wǎng)頁提交4目錄6.5狀態(tài)管理6.5.1ViewState6.5.2HiddenField控件6.5.3Cookie6.5.4Session6.5.5Application6.5.6Profile6.6小結(jié)56.1HTTP請求ASP.NET通過Page類的屬性Request能很好地控制請求數(shù)據(jù),如訪問客戶端的瀏覽器信息、查詢字符串、Cookie等信息。Page類的屬性Request是一個(gè)HttpRequest對象,它封裝了HTTP請求信息。6HttpRequest對象的數(shù)據(jù)集合對應(yīng)表數(shù)據(jù)集合說明QueryString從查詢字符串中讀取用戶提交的數(shù)據(jù)。Cookies獲得客戶端的Cookies數(shù)據(jù)。ServerVariables獲得服務(wù)器端或客戶端環(huán)境變量信息。ClientCertificate獲得客戶端的身份驗(yàn)證信息。Browser獲得客戶端瀏覽器信息。獲取HttpRequest對象的Browser數(shù)據(jù)集合的語法格式:Request.Browser。7QueryString數(shù)據(jù)集合使用QueryString獲得的查詢字符串是指跟在URL后面的變量及值,以“?”與URL間隔,不同的變量之間以“&”間隔。8實(shí)例6-1QueryString的使用當(dāng)單擊QueryString1.aspx頁面上鏈接后,頁面重定向到QueryString2.aspx;在頁面QueryString2.aspx中顯示從QueryString1.aspx傳遞過來的查詢字符串?dāng)?shù)據(jù)信息。源程序:QueryString1.aspx源程序:QueryString2.aspx9ServerVariables數(shù)據(jù)集合可很方便地取得服務(wù)器端或客戶端的環(huán)境變量信息,如客戶端的IP地址等。語法格式如下: Request.ServerVariables["環(huán)境變量名"]10常用的環(huán)境變量表環(huán)境變量名說明CONTENT_LENGTH發(fā)送到客戶端的文件長度。CONTENT_TYPE發(fā)送到客戶端的文件類型。LOCAL_ADDR服務(wù)器端的IP地址。REMOTE_ADDR客戶端IP地址。REMOTE_HOST客戶端計(jì)算機(jī)名。SERVER_NAME服務(wù)器端計(jì)算機(jī)名。SERVER_PORT服務(wù)器端網(wǎng)站的端口號。11Browser數(shù)據(jù)集合用于判斷用戶的瀏覽器類型、版本等,以便根據(jù)不同的瀏覽器編寫不同的網(wǎng)頁。語法格式為: Request.Browser["瀏覽器特性名"]。12瀏覽器特性名對應(yīng)表名稱說明Browser瀏覽器類型。Version瀏覽器版本號。MajorVersion瀏覽器主版本號。MinorVersion瀏覽器次版本號。Frames邏輯值,true表示支持框架功能。Cookies邏輯值,true表示支持Cookie。。JavaScript邏輯值,true表示支持JavaScript。ActiveXControls邏輯值,true表示支持ActiveXControl控件。13實(shí)例6-2ServerVariables和Browser應(yīng)用界面顯示信息為ServerVariables和Brower數(shù)據(jù)集合中相應(yīng)值。源程序:Request.aspx146.2HTTP響應(yīng)ASP.NET通過Page類的屬性Response(即HttpResponse對象)可以很好地控制輸出的內(nèi)容和方式,如頁面重定向、保存Cookie等。15HttpResponse對象的常用屬性和方法表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)頁。Redirect()頁面重定向,可通過URL附加查詢字符串在不同網(wǎng)頁之間傳遞數(shù)據(jù)。Write()WriteFile()在頁面上輸出信息。AppendToLog()將自定義日志信息添加到IIS日志文件中。16實(shí)例6-3Write()方法應(yīng)用利用Write()方法除可以輸出提示信息、變量值外,也可以輸出XHTML文本或JavaScript腳本等。源程序:Write.aspx17補(bǔ):WriteFile()方法功能:輸出一個(gè)指定文件的內(nèi)容。語法格式:Response.WriteFile(filename[,beginpoint][,length]))參數(shù)說明:filename:需向?yàn)g覽器輸出的文件的文件名;beginpoint:起始位置;length:輸出長度18利用Response.WriteFile方法向客戶端瀏覽器輸出信息。操作步驟:(1)新建一個(gè)項(xiàng)目(2)創(chuàng)建文本文件。
(3)編寫事件處理程序19protectedvoidPage_Load(objectsender,EventArgse){
intbegin=0,i;Response.Write("<center>");Response.Write("<fontsize=6face=方正舒體>");for(i=1;i<=4;i++){Response.Write("<p>");Response.WriteFile("poem.txt",begin,10);Response.Write("</p>");begin+=10;}Response.Write("</font></center>");}20若網(wǎng)頁中的漢字不能正常顯示,原因是由于瀏覽器和ASP.NET程序所使用的編碼格式不同引起的(ASP.NET程序默認(rèn)編碼格式為utf-8)。將編碼格式改為“gb2312”:添加:Response.Charset="gb2312";21protectedvoidPage_Load(objectsender,EventArgse){
intbegin=0,i;Response.Write("<center>");Response.Write("<fontsize=6face=方正舒體>");for(i=1;i<=4;i++){Response.Write("<p>");Response.WriteFile("poem.txt",begin,10);Response.Write("<p>");begin+=10;}Response.Write("</font></center>");}Response.Charset="gb2312";22實(shí)例6-4Redirect()方法應(yīng)用選擇“教師”后,頁面重定向到教師頁面Teacher.aspx面,選擇“學(xué)生”后頁面重定向到學(xué)生頁面Student.aspx。源程序:Redirect.aspx源程序:Teacher.aspx236.3HttpServerUtilityPage類的屬性Server(即HttpServerUtility對象)封裝了服務(wù)器端的一些操作,如轉(zhuǎn)換XHTML元素標(biāo)志、獲取網(wǎng)頁的物理路徑等。24HttpServerUtility對象的常用屬性和方法表ScriptTimeout屬性設(shè)置腳本文件執(zhí)行的最長時(shí)間,如:Server.ScriptTimeout=60;//設(shè)置最長時(shí)間為60秒Execute()停止執(zhí)行當(dāng)前網(wǎng)頁,轉(zhuǎn)到新的網(wǎng)頁執(zhí)行,執(zhí)行完畢后返回到原網(wǎng)頁,繼續(xù)執(zhí)行后續(xù)語句。HtmlEncode()將字符串中的XHTML元素標(biāo)記轉(zhuǎn)換為字符實(shí)體,如將“<”轉(zhuǎn)換為<。HtmlDecode()與HtmlEncode作用相反。MapPath()獲取網(wǎng)頁的物理路徑。Transfer()停止執(zhí)行當(dāng)前網(wǎng)頁,轉(zhuǎn)到新的網(wǎng)頁執(zhí)行,執(zhí)行完畢后不再返回原網(wǎng)頁。UrlEncode()將字符串中某些特殊字符轉(zhuǎn)換為URL編碼,如將“/”轉(zhuǎn)換為“%2f”,空格轉(zhuǎn)換為“+”等。UrlDecode()與UrlEncode作用相反。25區(qū)分Response.Redirect()、Server.Execute()和Server.Transfer()Redirect()方法盡管在服務(wù)器端執(zhí)行,但重定向?qū)嶋H發(fā)生在客戶端,可從瀏覽器地址欄中看到地址變化;而Execute()和Transfer()方法的重定向?qū)嶋H發(fā)生在服務(wù)器端,在瀏覽器的地址欄中看不到地址變化。Redirect()和Transfer()方法執(zhí)行完新網(wǎng)頁后,并不返回原網(wǎng)頁;而Execute()方法執(zhí)行完新網(wǎng)頁后會(huì)返回原網(wǎng)頁繼續(xù)執(zhí)行。26區(qū)分Response.Redirect()、Server.Execute()和Server.Transfer()(續(xù))Redirect()方法可重定向到同一網(wǎng)站的不同網(wǎng)頁,也可重定向到其它網(wǎng)站的網(wǎng)頁;而Execute()和Transfer()方法只能重定向到同一網(wǎng)站的不同網(wǎng)頁。利用Redirect()方法在不同網(wǎng)頁之間傳遞數(shù)據(jù)時(shí),狀態(tài)管理采用查詢字符串形式;而Execute()和Transfer()方法的狀態(tài)管理方式與Button按鈕的跨網(wǎng)頁提交方式相同。27實(shí)例6-5HttpServerUtility對象應(yīng)用Server.HtmlEncode()方法常用于在頁面輸出XHTML元素,若直接輸出,瀏覽器會(huì)將這些XHTML元素解釋輸出。Server.UrlEncode()常用于處理鏈接地址,如地址中包含空格等。單擊“Student.aspx鏈接”時(shí)將丟失“張”后面的信息。單擊“Student.aspx(UrlEncode)鏈接”時(shí),因使用了Server.UrlEncode()方法不再丟失“張”后面的信息。源程序:Server.aspx286.4跨網(wǎng)頁提交要實(shí)現(xiàn)頁面重定向,在ASP.NET3.5網(wǎng)頁中可以采用<a>元素、HyperLink控件、Response.Redirect()、Server.Execute()和Server.Transfer()方法。利用Button類型控件方式實(shí)現(xiàn)跨網(wǎng)頁提交,這種方式設(shè)置方便并具有安全的狀態(tài)管理功能。296.4跨網(wǎng)頁提交(續(xù))在實(shí)現(xiàn)跨網(wǎng)頁提交時(shí),需要將源網(wǎng)頁上Button類型控件的屬性PostBackUrl值設(shè)置為目標(biāo)網(wǎng)頁路徑。而在目標(biāo)頁上,需要在頁面頭部添加PreviousPageType指令,設(shè)置屬性VirtualPath值為源網(wǎng)頁路徑,如: <%@PreviousPageTypeVirtualPath="~/chap6/Cross1.aspx"%>306.4跨網(wǎng)頁提交(續(xù))從目標(biāo)網(wǎng)頁訪問源網(wǎng)頁中數(shù)據(jù)的方法利用PreviousPage.FindControl()方法訪問源網(wǎng)頁上的控件;在源網(wǎng)頁上定義公共屬性,再在目標(biāo)網(wǎng)頁上利用“PreviousPage.屬性名”獲取源網(wǎng)頁中數(shù)據(jù)。31區(qū)分跨網(wǎng)頁提交還是調(diào)用了Server.Execute()或Server.Transfer()方法需要在目標(biāo)網(wǎng)頁的.cs文件中判斷屬性PreviousPage.IsCrossPagePostBack的值。如果是跨網(wǎng)頁提交,那么屬性IsCrossPagePostBack值為true;如果是調(diào)用Server.Execute()或Server.Tranfer()方法,那么屬性IsCrossPageBack值為false。32實(shí)例6-6跨網(wǎng)頁提交應(yīng)用在Cross1.aspx中輸入“用戶名、密碼”后單擊“確定”,此時(shí)頁面提交到Cross2.aspx,在該頁面中顯示Cross1.aspx中輸入的數(shù)據(jù)信息。源程序:Cross1.aspx源程序:Cross2.aspx336.5狀態(tài)管理客戶端狀態(tài)是將信息保留在客戶端計(jì)算機(jī)上,當(dāng)客戶端向服務(wù)器端發(fā)送請求時(shí),狀態(tài)信息會(huì)隨之發(fā)送到服務(wù)器端。具體實(shí)現(xiàn)時(shí)可選擇ViewState、ControlState、HiddenField、Cookie和前面提及的查詢字符串,其中ControlState只能用于自定義控件的狀態(tài)管理。服務(wù)器狀態(tài)是指狀態(tài)的信息保存于服務(wù)器。具體實(shí)現(xiàn)時(shí)可選擇Session狀態(tài)、Application狀態(tài)或數(shù)據(jù)庫支持。34比較客戶端狀態(tài)和服務(wù)器端狀態(tài)客戶端狀態(tài)由于狀態(tài)數(shù)據(jù)保存在客戶端,所以不消耗服務(wù)器內(nèi)存資源,但容易泄露數(shù)據(jù)信息,安全性較差。服務(wù)器端狀態(tài)將消耗服務(wù)器端內(nèi)存資源,但具有較高的安全性。356.5.1ViewState又稱為視圖狀態(tài),用于維護(hù)自身Web窗體的狀態(tài)。當(dāng)用戶請求ASP.NET網(wǎng)頁時(shí),ASP.NET將ViewState封裝為一個(gè)或幾個(gè)隱藏的表單域傳遞到客戶端。當(dāng)用戶再次提交網(wǎng)頁時(shí),ViewState也將被提交到服務(wù)器端。這樣后續(xù)的請求就可以獲得上一次請求時(shí)的狀態(tài)。選擇“查看”→“源文件”可查看ViewState。366.5.1ViewState(續(xù))禁用ViewState:屬性EnableViewState設(shè)置為false。<asp:GridViewID="GridView1"runat="server"EnableViewState="False"></asp:GridView>禁止整個(gè)網(wǎng)頁的ViewState:使用@Page指令。<%@PageEnableViewState="false"Language="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="chap6_Default"%>376.5.2HiddenField控件又稱隱藏域,用于維護(hù)自身窗體的狀態(tài),它不會(huì)顯示在用戶的瀏覽器中,但可以像設(shè)置標(biāo)準(zhǔn)控件的屬性那樣設(shè)置其屬性。成員主要有屬性Value和事件ValueChanged。注意:要觸發(fā)ValueChanged事件,需設(shè)置HiddenField控件的屬性EnableViewState值為false。386.5.3Cookie保存到客戶端硬盤或內(nèi)存中的一小段文本信息,如站點(diǎn)、客戶、會(huì)話等有關(guān)的信息。與網(wǎng)站關(guān)聯(lián),而不是與特定的網(wǎng)頁關(guān)聯(lián)。用戶訪問不同站點(diǎn)時(shí),各個(gè)站點(diǎn)都可能會(huì)向用戶的瀏覽器發(fā)送一個(gè)Cookie,瀏覽器會(huì)分別存儲(chǔ)所有的Cookie??梢栽诳蛻舳诵薷腃ookie設(shè)置和禁用Cookie。396.5.3Cookie(續(xù))當(dāng)用戶的瀏覽器關(guān)閉對Cookie的支持,而不能有效地識別用戶時(shí),只需在web.config中加入以下語句:<sessionStatecookieless="AutoDetect"><sessionStatecookieless="UseUri">Cookie文本文件存儲(chǔ)于“盤符:\DocumentsandSettings\<用戶名>\Cookies”文件夾。ASP.NET提供System.Web.HttpCookie類來處理Cookie,常用的屬性是Value和Expires。406.5.3Cookie(續(xù))每個(gè)Cookie一般都會(huì)有一個(gè)有效期限,當(dāng)用戶訪問網(wǎng)站時(shí),瀏覽器會(huì)自動(dòng)刪除過期的Cookie。沒有設(shè)置有效期的Cookie將不會(huì)保存到硬盤文件中,而是作為用戶會(huì)話信息的一部分。當(dāng)用戶關(guān)閉瀏覽器時(shí),Cookie就會(huì)被丟棄。這種類型的Cookie很適合用來保存只需短時(shí)間存儲(chǔ)的信息,或者保存由于安全原因不應(yīng)寫入客戶端硬盤文件的信息。416.5.3Cookie(續(xù))使用Response.Cookies數(shù)據(jù)集合建立Cookie。 Response.Cookies["Name"].Value=“張三”;也可以先創(chuàng)建HttpCookie對象,設(shè)置其屬性,然后通過Response.Cookies.Add()方法添加。HttpCookiecookie=newHttpCookie("Name"); cookie.Value="張三"; cookie.Expires=DateTime.Now.AddDays(1); Response.Cookies.Add(cookie);使用Request.Cookies數(shù)據(jù)集合獲取Cookie值。 stringname=Request.Cookies.["Name"].Value;
42在ASP.NET中是利用Cookies集合的Expires屬性來設(shè)置Cookie的生存時(shí)間。語法格式:
Response.Cookies["CookieName"].Expires=日期例如:Response.Cookies["Cookiename"].Expries=System.DateTime.MaxValue;//永不過期例如:
DateTimedt=newDateTime(2010,12,1);Response.Cookies["MyCookie"].Expires=dt;43例:向?yàn)g覽器寫入Cookie并從瀏覽器讀取CookieprotectedvoidPage_Load(objectsender,EventArgse){
//創(chuàng)建cookie對象user
Response.Write("<center>"+"寫入cookie"+"</center>");Response.Write("<center>"+Request.Cookies["user"].Value+"</center>");}
Response.Cookies[“user"].Value="youarewonderfull";
HttpCookiemycookie=newHttpCookie("user");mycookie.Value="youarereallywonderfull!";Response.Cookies.Add(mycookie);44例:向客戶端硬盤上寫入Cookie并從客戶端硬盤讀取Cookie(改寫)設(shè)置Cookie的生存期為永久Cookie后,Cookie將被保存到客戶端硬盤上(文件名為:當(dāng)前用戶名@localhost[1].txt)
protectedvoidPage_Load(objectsender,EventArgse){
//創(chuàng)建cookie對象user]Response.Write("<center>"+"寫入cookie"+"</center>");Response.Write("<center>"+
Request.Cookies["user"].Value+"</center>");}
Response.Cookies[“user"].Value="youarewonderfull";Response.Cookies[“user”].Expires=DateTime.MaxValue;
HttpCookiemycookie=newHttpCookie("user");
mycookie.Value="youarereallywonderfull!";
mycookie.Expires=DateTime.MaxValue;Response.Cookies.Add(mycookie);45實(shí)例6-7Cookie應(yīng)用本實(shí)例主要實(shí)現(xiàn)利用Cookie確認(rèn)用戶是否已登錄,其中Cookie.aspx頁面只有在用戶登錄后才能顯示。源程序:Cookie.aspx源程序:CookieLogin.aspx程序說明:測試時(shí)先瀏覽Cookie.aspx,此時(shí)因無用戶名Cookie信息,頁面重定向到CookieLogin.aspx,輸入用戶名單擊確定將用戶名信息存入Cookie。關(guān)閉瀏覽器。再次瀏覽Cookie.aspx可看到歡迎信息。466.5.4Session又稱會(huì)話狀態(tài),典型的應(yīng)用有儲(chǔ)存用戶信息、多網(wǎng)頁間信息傳遞、購物車等。Session產(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ǎng)頁,服務(wù)器會(huì)為該用戶產(chǎn)生新的Session。476.5.4Session(續(xù))ASP.NET用一個(gè)唯一的120位SessionID來標(biāo)識每一個(gè)會(huì)話。若客戶端支持Cookie,ASP.NET會(huì)將SessionID保存到相應(yīng)的Cookie中;若不支持,就將SessionID添加到URL中。注意:不管SessionID保存在Cookie還是添加在URL中,都是明文。如果需要保護(hù)SessionID,可考慮采用SSL通信。Session由System.Web.HttpSessionState類實(shí)現(xiàn),使用時(shí),常直接通過Page類的Session屬性訪問HttpSessionState類的實(shí)例。
48
HttpSessionState常用的屬性、方法和事件表
Contents屬性獲取對當(dāng)前會(huì)話狀態(tài)對象的引用。IsCookieless屬性邏輯值,確定SessionID嵌入在URL中還是存儲(chǔ)在Cookie中。true表示存儲(chǔ)在Cookie中。IsNewSession屬性邏輯值,true表示是與當(dāng)前請求一起創(chuàng)建的。Mode屬性獲取當(dāng)前會(huì)話狀態(tài)的模式。SessionID屬性獲取會(huì)話的唯一標(biāo)識ID。Timeout屬性獲取或設(shè)置會(huì)話狀態(tài)持續(xù)時(shí)間,單位為分鐘,默認(rèn)為20分鐘。Abandon方法取消當(dāng)前會(huì)話。Remove方法刪除會(huì)話狀態(tài)集合中的項(xiàng)。Session_Start事件用戶請求網(wǎng)頁時(shí)觸發(fā),相應(yīng)的事件代碼包含于Global.asax文件中。Session_End事件用戶會(huì)話結(jié)束時(shí)觸發(fā),相應(yīng)的事件代碼包含于Global.asax文件中。496.5.4Session(續(xù))只有在web.config文件中的sessionstate模式設(shè)置為InProc時(shí),才會(huì)引發(fā)Session_End事件。如果會(huì)話模式設(shè)置為StateServer或SQLServer,則不會(huì)引發(fā)該事件。對Session狀態(tài)的賦值: Session["Name"]="張三"; Session.Contents["Name"]="張三";注意:Session使用的名稱不區(qū)分大小寫,因此不要用大小寫區(qū)分不同變量。50(1)創(chuàng)建Session變量(設(shè)置Session變量的值)語法格式為:Session["變量名稱"]=數(shù)據(jù)或者
Session.Add("變量名稱",數(shù)據(jù))(2)獲取Session變量的值語法格式為:變量=(類型)(
Session["變量名稱"])51(3)刪除Session變量語法格式為:
Session.Remove("變量名稱")(4)刪除所有Session變量語法格式為:
Session.RemoveAll()或者
Session.Clear()52Session狀態(tài)的存儲(chǔ)方式可以在web.config中通過<SessionState>元素的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。53某考試系統(tǒng)的Session狀態(tài)設(shè)置<configuration><system.web><sessionStatemode="StateServer"stateConnectionString="tcpip=StateServerName:42424"cookieless="false"timeout="90"></sessionState></system.web></configuration>54實(shí)例6-8Session應(yīng)用本實(shí)例能保護(hù)某些網(wǎng)頁,如要進(jìn)入Session.aspx頁面,則首先要通過登錄認(rèn)證。源程序:Session.aspx程序說明:當(dāng)用戶直接訪問Session.aspx時(shí),會(huì)判斷Session["Name"]狀態(tài)值,若為空則重定向到SessionLogin.aspx,否則顯示歡迎信息。在SessionLogin.aspx中用戶登錄成功后,將建立Session["Name"]狀態(tài)值。此時(shí)要測試是否存在Session["Name"]狀態(tài)值,應(yīng)在打開SessionLogin.aspx頁面的瀏覽器中直接更改地址來訪問Session.aspx。55例:購物車56
protectedvoidButton1_Click(objectsender,EventArgse){inti;stringstr="您選中的水果有:<br>";for(i=0;i<CheckBoxList1.Items.Count;i++)if(CheckBoxList1.Items[i].Selected)str+=CheckBoxList1.Items[i].Value+"<br>";Session["fruit"]=str;}57
<htmlxmlns="/1999/xhtml"><headrunat="server"><title>無標(biāo)題頁</title></head><body><%Response.Write("<p>購物情況顯示:</p>");Response.Write("<p>"+Session["flower"]+"</p>");Response.Write("<p>"+Session["fruit"]+"</p>");%></body></html>586.5.5Application又稱應(yīng)用程序狀態(tài),與應(yīng)用于單個(gè)用戶的Session狀態(tài)不同,它應(yīng)用于所有的用戶。在網(wǎng)站運(yùn)行時(shí)存在,網(wǎng)站關(guān)閉時(shí)將被釋放。因此,如果需要將狀態(tài)數(shù)據(jù)保存下來,則適宜保存在數(shù)據(jù)庫中。由System.Web.HttpApplicationState類來實(shí)現(xiàn)。596.5.5Application(續(xù))Application是面對所有用戶的,當(dāng)要修改Application狀態(tài)值時(shí),首先要調(diào)用Application.Lock()方法鎖定,值修改后再調(diào)用Application.UnLock()方法解除鎖定。Application.Lock();Application["Count"]=(int)Application["Count"]+1;Application.UnLock();與Application相關(guān)的事件主要有Application_Start、Application_End、Application_Error與Session類似,這些事件代碼都存放于Global.asax文件中。60實(shí)例6-9統(tǒng)計(jì)網(wǎng)站在線人數(shù)頁面呈現(xiàn)網(wǎng)站在線人數(shù)。需考慮3個(gè)方面:初始化計(jì)數(shù)器;當(dāng)一個(gè)用戶訪問網(wǎng)站時(shí),計(jì)數(shù)器增1;當(dāng)一個(gè)用戶離開網(wǎng)站時(shí),計(jì)數(shù)器減1。初始化計(jì)數(shù)器要利用Application_Start事件,并在事件代碼中定義Application狀態(tài)。用戶訪問網(wǎng)站時(shí)增加計(jì)數(shù)要利用Session_Start事件,并在事件代碼中增加Application狀態(tài)值。用戶離開網(wǎng)站時(shí)減少計(jì)數(shù)要利用Session_End事件,并在事件代碼中減小Application狀態(tài)值。源程序:Global.asax、Application.aspx61voidApplication_Start(objectsender,EventArgse){
Application["onlinenum"]=0;}
voidSession_Start(objectsender,EventArgse){//在新會(huì)話啟動(dòng)時(shí)運(yùn)行的代碼
Session.Timeout=30;//會(huì)話超時(shí)期限為30分鐘
Application.Lock();
Application["onlinenum"]=
Convert.ToInt32(Application["onlinenum"])+1;
Application.UnLock();}
voidSession_End(objectsender,EventArgse){//在會(huì)話結(jié)束時(shí)運(yùn)行的代碼。
Application.Lock();
Application["onlinenum"]=
Convert.ToInt32(Application["onlinenum"])-1;
Application.UnLock();}62程序說明可同時(shí)利用多個(gè)瀏覽器或多臺(tái)計(jì)算機(jī)訪問Application.aspx,進(jìn)行測試。當(dāng)然,若通過多臺(tái)計(jì)算機(jī)進(jìn)行測試,需要先將網(wǎng)站發(fā)布到IIS。注意:Session_End事件是在會(huì)話結(jié)束時(shí)觸發(fā),所以關(guān)閉瀏覽器不會(huì)立即觸發(fā)該事件,只有到達(dá)屬性Timeout設(shè)置的時(shí)間時(shí)該事件才被觸發(fā),此時(shí),相應(yīng)的當(dāng)前在線人數(shù)才會(huì)減少。636.5.6ProfileProfile提供的個(gè)性化用戶配置功能可以很方便地實(shí)現(xiàn)為每個(gè)用戶定義、存儲(chǔ)和管理配置信息,這些信息的創(chuàng)建、存儲(chǔ)和管理是自動(dòng)完成的。針對的用戶可以是注冊用戶,也可以是匿名用戶。要保存匿名用戶信息需要設(shè)置AllowAnonymous="true"。對不同的匿名用戶會(huì)自動(dòng)識別。646.5.6Profile(續(xù))默認(rèn)情況下,配置信息存儲(chǔ)在SQLServerExpress2005中,并以ASPNETDB.mdf數(shù)據(jù)庫名存放在網(wǎng)站的App_Data文件夾。也可以將配置信息保存到其它版本的SQLServer中,此時(shí)需要使用“盤符:\Windows\Microsoft.NET\Framework\v2.0.50727”文件夾中的aspnet_regsql.exe命令行工具。656.5.6Profile(續(xù))使用個(gè)性化用戶配置功能主要有兩個(gè)步驟:第一,在web.config文件中的<profile>配置節(jié)中定義配置信息名、數(shù)據(jù)類型、是否允許匿名用戶存儲(chǔ)信息等。第二,在程序中利用Profile對象訪問用戶配置信息。66實(shí)例6-10應(yīng)用Profile保存郵政編碼信息當(dāng)用戶輸入郵政編碼,單擊“寫入”后將把郵政編碼保存到ASPNETDB.mdf數(shù)據(jù)庫的aspnet_Profile表中。單擊“顯示”后從aspnet_Profile表中獲取用戶的郵政編碼并顯示在頁面上。源程序:web.config源程序:Profile.aspx程序說明:從程序處理流程中可以看出,保存和獲取用戶配置信息完全自動(dòng)完成,不需要連接數(shù)據(jù)庫等語句。
67例:設(shè)計(jì)一個(gè)能記錄用戶登錄次數(shù)及登錄時(shí)間的用戶登錄頁面。第一個(gè)頁面用于接受用戶輸入的姓名和密碼。如果輸入有誤,則還停留在此頁,讓用戶繼續(xù)輸入。如果輸入正確(用戶名為student,密碼為123),則打開第二個(gè)頁面。此頁面中顯示登錄成功的信息、用戶的登錄次數(shù)及上次登錄時(shí)間。68(1)如何取得登錄次數(shù)?一個(gè)cookie用于記錄登錄次數(shù)(park),本次登錄次數(shù)=從cookie中取出的登錄次數(shù)+1,最后再把本次的訪問次數(shù)回寫入cookie。(2)如何取得上次登錄時(shí)間?一個(gè)cookie用于記錄上次登錄時(shí)間(logtime),在每次登錄成功后記錄時(shí)間寫入Cookie,下次登錄時(shí)使用。(3)如何處理第一次登錄的情況?第一次登錄時(shí)兩個(gè)cookie都不存在。記錄本次登錄時(shí)間給下次使用。登錄次數(shù)先賦0,然后加169綜合實(shí)訓(xùn):簡單網(wǎng)絡(luò)聊天室
1.聊天室的設(shè)計(jì)思路整個(gè)聊天室共由5個(gè)頁面組成,它們的名稱及主要功能如下:login.aspx:登錄頁面,用戶可在此頁面輸入姓名及密碼進(jìn)行登錄。main.htm:聊天室的主界面,此頁面被分成左右兩個(gè)框架;左邊的頁面又被分成上下兩個(gè)框架,上面的頁面用于顯示聊天信息,下面的頁面用于發(fā)送信息;右邊的頁面用于顯示一些基本信息(在線人數(shù)、用戶名、用戶登錄次數(shù)、最近登錄時(shí)間、在線用戶等)。show.aspx:顯示聊天信息頁面。send.aspx:聊天信息發(fā)送頁面。message.aspx:基本信息顯示頁面。70712.創(chuàng)建聊天室的準(zhǔn)備工作
1、創(chuàng)建項(xiàng)目及文件在VisualStudio.NET2005編輯環(huán)境中新建一個(gè)名為“chatroom”ASP.NETWeb應(yīng)用程序項(xiàng)目。項(xiàng)目中包含四個(gè)ASP.NET頁面,分別為login.aspx、show.aspx、send.aspx、message.aspx。添加一個(gè)HTML頁面main.htm。2、準(zhǔn)備好項(xiàng)目所用的圖片文件準(zhǔn)備好的背景圖片文件“white1.JPG”添加到項(xiàng)目中來,并放在“img”文件夾下。3、設(shè)置編碼方式為使讓漢字能正確顯示,需要
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024葡萄酒年份酒拍賣會(huì)組織與銷售代理合同3篇
- 2024車輛保養(yǎng)維修中心服務(wù)承包合同
- 2024版路燈租賃合同書
- 2025年度廠房投資合作項(xiàng)目合同范本3篇
- 2024年跨國軟件定制開發(fā)合同
- 2024風(fēng)力發(fā)電項(xiàng)目投資建設(shè)合同
- 2024版云計(jì)算服務(wù)定制合同
- 2024年鋼筋工程勞務(wù)承包專用合同
- 2024特崗教師招聘與聘用及培訓(xùn)與考核服務(wù)合同3篇
- 動(dòng)物疫病檢驗(yàn)技術(shù)知到智慧樹章節(jié)測試課后答案2024年秋黑龍江農(nóng)業(yè)經(jīng)濟(jì)職業(yè)學(xué)院
- 2024年內(nèi)容創(chuàng)作者與平臺(tái)合作協(xié)議2篇
- 《實(shí)驗(yàn)性研究》課件
- 酒店客房打掃培訓(xùn)
- 2024-2025學(xué)年高考英語語法第一輪復(fù)習(xí):定語從句(講義)(原卷版+解析)
- 保險(xiǎn)理賠崗位招聘面試題與參考回答(某大型央企)2024年
- 第10課《我們不亂扔》(教學(xué)設(shè)計(jì))-部編版道德與法治二年級上冊
- 瑞士萬通831KF卡爾費(fèi)休水分測定儀干貨-庫侖法
- 第14章第1節(jié)熱機(jī)-課件(共21張課件)-人教版初中物理九年級全一冊.課件
- 2025屆浙江省樂清市知臨中學(xué)高一數(shù)學(xué)第一學(xué)期期末檢測試題含解析
- 課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)報(bào)告書(3篇)
- 行車調(diào)度員技能競賽考試題庫及含答案
評論
0/150
提交評論