510 likes | 659 Views
第 10 章 Web應用程式的資料分享. 10-1 Web 應用程式的基礎 10-2 設定 ASP.NET 的 Web 應用程式 10-3 網頁間的資料分享 10-4 Application 與 Session 物件 10-5 Global.asax 檔案的使用 10-6 Cookies 的處理 10-7 Request 物件的表單處理 10-8 跨程式的 Web 表單送回. 10-1 Web應用程式的基礎. 10-1-1 在 IIS 建立 Web 應用程式 10-1-2 在 VWD 測試伺服器建立 Web 應用程式.
E N D
第10章 Web應用程式的資料分享 • 10-1 Web應用程式的基礎 • 10-2 設定ASP.NET的Web應用程式 • 10-3 網頁間的資料分享 • 10-4 Application與Session物件 • 10-5 Global.asax檔案的使用 • 10-6 Cookies的處理 • 10-7 Request物件的表單處理 • 10-8 跨程式的Web表單送回
10-1 Web應用程式的基礎 • 10-1-1 在IIS建立Web應用程式 • 10-1-2 在VWD測試伺服器建立 Web應用程式
10-1 Web應用程式的基礎 • ASP.NET「應用程式」(Applications)是指使用ASP.NET技術建立的Web應用程式,它是由網頁相關檔案所組成,可以完成特定工作的應用程式。 • ASP.NET應用程式簡單的說就是一種.NET Framework應用程式,因為它是在Web伺服器上執行的應用程式,所以稱為Web應用程式。
10-1-1 在IIS建立Web應用程式 • 在IIS的Web伺服器能夠將整個網站,或指定網站目錄建立成Web應用程式。並且能夠在同一個網站建立多個Web應用程式,每一個虛擬目錄都可以建立成為Web應用程式。 • 在IIS建立Web應用程式的方法,如下所示: • 在IIS新增網站:主目錄預設是一個Web應用程式。 • 網站虛擬目錄(Virtual Directories):當目錄新增成為虛擬目錄或Web共用時,如果目錄擁有【指令碼】權限,它就是一個Web應用程式,詳細步驟請參閱第1-5-3節。 • 主目錄下實際路徑的子目錄:預設與上一層主目錄屬於同一個Web應用程式。
10-1-2 在VWD測試伺服器建立Web應用程式-1 • VWD內建測試ASP.NET程式執行的程式開發伺服器,事實上,它就是1.0/1.1版名為Cassini的個人Web伺服器,這是支援ASP.NET技術的Web伺服器,可以在非IIS環境測試執行ASP.NET應用程式。 • 當VWD開啟「Ch10」資料夾網站和執行ASP.NET程式Default.aspx時,就會在工作列建立程式開發伺服器圖示,如下圖所示:
10-1-2 在VWD測試伺服器建立Web應用程式-2 • 在程式開發伺服器的圖示,執行右鍵【顯示詳細資訊】指令,可以看到伺服器的詳細資訊,一個VWD的程式開發伺服器只能建立一個Web應用程式,以此例它是在埠號1059建立Web應用程式。
10-2 設定ASP.NET的Web應用程式 • 10-2-1 Web.Config組態檔 • 10-2-2 Web介面的網站管理工具
10-2-1 Web.Config組態檔-說明 • Web組態檔是ASP.NET技術Web應用程式的資源設定檔案,它是一份XML文件,內含Web應用程式相關設定的XML標籤,可以用來簡化ASP.NET應用程式的設定。 • 雖然我們可以自行編輯位在Web應用程式根目錄的Web.Config組態檔內容,不過,另一種簡單方式是直接使用下一節的Web介面網站管理工具,使用它來更改Web.Config檔案的相關設定。
10-2-1 Web.Config組態檔-範例 <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings/> <connectionStrings> <add name="iPodsConnectionString" connectionString="Provider=…" providerName="System.Data.OleDb" /> </connectionStrings> <system.web> <compilation debug="false" /> <authentication mode="Windows" /> <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /> </customErrors> </system.web> </configuration>
10-2-2 Web介面的網站管理工具-啟動 • 在Visual Web Developer提供Web介面的ASP.NET網站管理工具,請啟動VWD開啟「Ch10」網站後,執行「網站」→「ASP.NET組態」指令,可以開啟瀏覽程式進入Web介面管理工具,如下圖所示:
10-2-2 Web介面的網站管理工具-安全性標籤 • 在此標籤可以建立Web應用程式的安全設定,包含驗證方式、建立和管理使用者、角色和存取規則,詳細說明請參閱第17章。
10-2-2 Web介面的網站管理工具-應用程式標籤 • 在此標籤可以更改Web應用程式設定、設定SMTP伺服器、更改應用程式狀態和除錯與追蹤模式,如下圖所示:
10-2-2 Web介面的網站管理工具-提供者標籤 • 在此標籤可以設定資料來源提供者(Data Provider),預設使用AspNetSqlProvider提供者。
10-3 網頁間的資料分享 • 10-3-1 在網頁間分享資料 • 10-3-2 網頁間資料分享的方法
10-3-1 在網頁間分享資料-說明 • 當使用者進入網站,因為HTTP通訊協定並不會保留客戶端的使用者狀態,在伺服端根本不知道瀏覽端有哪些使用者正在瀏覽和其使用狀態。 • 例如:在移至其他ASP.NET程式時,使用者資料並不會自動傳給下一頁,除非瀏覽每一頁時都讓使用者在Web表單重新輸入一次。
10-3-1 在網頁間分享資料-種類 • 分享給網站所有的使用者:在ASP.NET程式就是使用Application變數進行分享,例如:目前線上的使用者計數。 • 針對每位使用者的專屬資料:在ASP.NET程式就是Session變數的分享資料,例如:登入使用者的個人資料。
10-3-2 網頁間資料分享的方法 • ASP.NET的資料分享方法,如下所示: • Application和Session物件。 • ASP.NET 2.0版的Profile物件,請參閱第17章。 • 使用Cookies保留在客戶端電腦。 • 將Web表單處理程式指定成其他ASP.NET程式,就可以將欄位資料傳遞到其他ASP.NET程式,即跨ASP.NET程式的表單送回。 • Request物件配合表單或網址URL參數,將欄位資料和參數傳到其他ASP.NET程式,即ASP 3.0版的表單處理。
10-4 Application與Session物件 • 10-4-1 Application與Session物件的基礎 • 10-4-2 Application變數的使用 • 10-4-3 Session變數的使用
10-4-1 Application與Session物件的基礎-說明 • 在ASP.NET的Web應用程式擁有一個Application物件,針對每一位使用者擁有對應的Session物件,如下圖所示:
10-4-1 Application與Session物件的基礎-Application物件 • Application物件的主要目的是建立Application變數的集合物件,可以提供進入Web應用程式的每位使用者一個資料分享的管道。它允許客戶端的每位使用者存取Application變數。以此例使用者1和2都可以存取Application變數。 • Application物件存在期間是在第1個Session物件建立後產生,直到Web伺服器關機且所有的使用者都離線後Web應用程式結束後才會關閉。
10-4-1 Application與Session物件的基礎-Session物件 • ASP.NET的【Session期間】是指Web應用程式從一頁ASP.NET網頁移到其他ASP.NET網頁過程中所花費的時間。ASP.NET技術提供相關類別來管理Session期間的資訊,也就是建立Session物件來保留Session期間的資料。 • 當一位尚未建立Session物件的使用者執行Web應用程式的ASP.NET程式時,伺服器就會自動建立一個對應的Session物件,而且指定唯一的Session ID編號。例如:上述圖例的每一位使用者都擁有專屬ID的Session物件,只允許對應使用者存取Session變數,在同一個Web應用程式的其他使用者並不能存取。
10-4-2 Application變數的使用-1 • 不論網站的Web應用程式有多少位使用者進入,對於每一個Application變數,伺服端都只會在記憶體保留一份資料,變數的基本格式如下: Application("Page_Counter") = 0 • 上述變數名稱和ASP.NET程式變數不太一樣,這是一個字串"Page_Counter",加上Application()來取得集合物件的指定元素,它可以將Application變數Page_Counter設為零。
10-4-2 Application變數的使用-2 • 為了避免資料存取衝突的情況,因為2位使用者同時讀取Application變數並沒有關係,如果一位更改,一位讀取Application變數,在這種情況下衝突就會發生,為了避免這種情況,Application的方法可以保障在同一時間內只允許一位使用者存取Application變數,如下所示: Application.Lock() Application("Page_Counter") = _ Application("Page_Counter")+1 Application.Unlock()
10-4-3 Session變數的使用-說明 • Session變數是附屬在進入Web應用程式使用者的Session期間,每一位使用者擁有一組專屬Session變數,雖然每位使用者的Session變數名稱相同,但是內容可能完全不同,而且只有該使用者執行的ASP.NET程式才能夠存取自己專屬的Session變數。
10-4-3 Session變數的使用-傳遞資料 • Session變數可以在網頁間分享資料,換句話說,我們可以使用Session變數將Web表單輸入資料傳遞給其他ASP.NET程式,如下所示: Session("UserName") = name.Text Session("UserPassword") = pass.Text • 只要使用者沒有超過Session期間或執行Abandon()方法,在期間內執行其他ASP.NET程式,都可以存取上述Session變數值,如下所示: name = Session("UserName") password = Session("UserPassword")
10-5 Global.asax檔案的使用 • 10-5-1 在VWD新增Global.asax檔案 • 10-5-2 Global.asax檔案的架構 • 10-5-3 Global.asax檔案的使用
10-5 Global.asax檔案的使用 • Global.asax是選擇性檔案,在ASP.NET的Web應用程式並不一定需要此檔案,除非Web應用程式需要使用到Application和Session物件的事件,因為這些事件處理程序是位在Global.asax檔案。 • 在ASP.NET的Web應用程式新增Global.asax檔案時,請注意!一個Web應用程式只能擁有唯一的Global.asax檔案,其位置是Web應用程式的根目錄。
10-5-1 在VWD新增Global.asax檔案 • ASP.NET的Global.asax檔案是ANSI文字檔案,使用Windows記事本或VWD都可以編輯Global.asax檔案的內容。在Visual Web Developer新增Global.asax檔案的步驟,如下所示: • 1. 請啟動VWD開啟「Ch10」網站後,執行「檔案」→「新增」→「檔案」指令,可以看到「加入新項目」對話方塊。 • 2. 選【全球應用程式類別】(如果網站已經新增,就不會看到此項目),按【加入】鈕就可以在網站新增Global.asax檔案。
10-5-2 Global.asax檔案的架構-架構 <%@ Application Language="VB" %> <script Runat="server"> Sub Application_Start(ByVal Sender As Object, _ ByVal E As EventArgs) End Sub Sub Application_End(ByVal Sender As Object, _ ByVal E As EventArgs) End Sub Sub Application_Error(ByVal Sender As Object, _ ByVal E As EventArgs) End Sub Sub Session_Start(ByVal sender As Object, _ ByVal e As EventArgs) End Sub Sub Session_End(ByVal sender As Object, _ ByVal e As EventArgs) End Sub </script>
10-5-3 Global.asax檔案的使用-1 • 當使用者請求ASP.NET程式後,就會替每位使用者建立Session期間,接著檢查ASP.NET應用程式是否擁有Global.asax檔案。 • 如果有Global.asax檔案,在執行ASP.NET檔案的程式碼前,如果是第1位使用者,就觸發Application物件的Start事件,執行Global.asax檔案的Application_Start()事件處理程序,接著建立Session物件,因為Global.asax檔案存在,接著執行Session_Start()事件處理程序。
10-5-3 Global.asax檔案的使用-2 • 當Session期間超過TimeOut屬性的設定(預設20分鐘)或執行Abandon()方法,表示Session期間結束,就觸發Session物件的End事件執行Session_End()事件處理程式,處理程序是在關閉Session物件前執行。 • Web伺服器如果關機,在關閉Application物件前就會執行Application_End()事件處理程序,當然也會結束所有使用者的Session期間,和執行所有使用者的Session_End()事件處理程序。
10-6 Cookies的處理 • 10-6-1 Cookies的基礎 • 10-6-2 新增Cookie • 10-6-3 取得Cookie的值 • 10-6-4 刪除Cookie • 10-6-5 多鍵Cookie的使用
10-6-1 Cookies的基礎-說明 • Cookies的英文意義是小餅乾,源於這些儲存在客戶端電腦的檔案尺寸都很小,Cookies儲存在瀏覽程式所在的電腦,所以並不會浪費Web伺服器的資源。 • 在ASP.NET程式只需檢查客戶端是否有儲存Cookie,在取得Cookie的保留資訊後,就可以輕鬆建立複雜的Web應用程式。
10-6-1 Cookies的基礎-用途 • Cookies在網站實作上的應用相當多,使用Cookies保留的資料大都屬於幾個方面,如下所示: • 個人資訊:使用Cookies保留個人資訊,例如:使用者名稱、時區、帳號和造訪網站的次數等。 • 個人化資訊:Cookies可以定製個人化的網站外觀和個人偏好的網站內容,或是記錄使用者有興趣的資訊。 • 網站購物車:線上購物車需要保留使用者選擇的商品清單,Cookies就可以用來記錄這些選購商品。
10-6-2 新增Cookie • Cookie是一種集合物件,可以使用名稱存取Cookie值,新增Cookie是使用Response物件的Cookies屬性來新增Cookie,其程式碼如下所示: Dim name As String = "江小魚" Response.Cookies("UserName").Value = name • 在新增Cookie後還需要設定Cookie的Expires屬性,即Cookie檔案存在客戶端電腦的期限,如下所示: Dim dtDay As Date = DateAdd("D", 10, Today) Response.Cookies("UserName").Expires = dtDay
10-6-3 取得Cookie的值 • 在客戶端電腦如果擁有Cookie,ASP.NET程式可以使用Request物件的Cookies集合物件來取得指定的Cookie值,如下所示: name = Request.Cookies("UserName").Value • 上述程式碼可以取得Cookie名稱UserName的值,並且將它指定給變數name。
10-6-4 刪除Cookie • 客戶端的Cookie如果不再需要,在ASP.NET程式可以刪除Cookie,刪除方式是將Expires屬性設定成過期的時間,如下所示: Dim dtDay As Date = DateAdd("D", -365, Today) Response.Cookies("UserName").Expires = dtDay • 上述程式碼將有效期限設為一年前,因為Cookie已經過期,換句話說,就是刪除Cookie。
10-6-5 多鍵Cookie的使用-說明 • Cookie是一種目錄結構的集合物件,在同名Cookie下可以擁有不同Key的鍵名。換句話說,同一個Cookie名稱就可以儲存多種資料。
10-6-5 多鍵Cookie的使用-新增多鍵的Cookie • 在ASP.NET程式新增多鍵Cookie,需要在名稱後再加上鍵名,如下所示: Response.Cookies("User")("UserName") = "陳會安" Response.Cookies("User")("Password") = "1234" Response.Cookies("User").Expires = _ DateAdd("D",10,Today)
10-6-5 多鍵Cookie的使用-取得多鍵的Cookie值 • 多鍵Cookie如同陣列,取得Cookie值時不只需要指定名稱,還需要指定鍵名,如下所示: name = _ Request.Cookies("User")("UserName") pass = Request.Cookies("User")("Password")
10-6-5 多鍵Cookie的使用-刪除多鍵的Cookie • 多鍵Cookie的刪除和第10-6-4節相同,只需將Cookie的Expires屬性設為過期後,就可以刪除Cookie。如果只刪除Cookie其中一個鍵名,請將該鍵名設成空字串即可,如下所示: Response.Cookies("User")("Password") = "" • 上述程式碼刪除Cookie名稱為User的Password鍵名。
10-7 Request物件的表單處理 • 10-7-1 Form與QueryString集合物件 • 10-7-2 Request物件的表單處理
10-7-1 Form與QueryString集合物件-ASP 3.0版的表單處理 • ASP 3.0版的表單處理就是使用Request物件的Form與QueryString集合物件來取得輸入資料,如下所示: • 傳統HTML/XHTML表單網頁:使用表單欄位以HTTP通訊協定的檔頭傳遞表單欄位資料,可以使用POST或GET方法,如下所示: <form name="name" method="POST | GET" action="URL"> ………. </form> • URL參數:從瀏覽程式輸入的網址傳遞參數,其總長度只有1024個字元。
10-7-1 Form與QueryString集合物件-Form集合物件 • 網頁表單如果使用POST方法傳遞資料,它是將傳遞資料在編碼後,透過HTTP通訊協定的標頭資料傳送到Web伺服器,在伺服端可以使用Form集合物件來取出資料,其語法如下所示: Request(("FieldName") Request.Form("FieldName")
10-7-1 Form與QueryString集合物件-QueryString集合物件 • 網頁表單如果使用GET方法傳遞資料,就是將傳遞資料編碼後,透過URL網址後的字串傳送到Web伺服器,參數是位在問號之後,如果參數不只一個,請使用「&」符號分隔,如下所示: http://localhost/Ch10-7-2.aspx?fname1=value1&fname2=value2 • 當瀏覽程式輸入上述網址,按下Enter鍵後,伺服端就可以使用QueryString集合物件來取出資料,如下所示: Request(("FieldName") Request.QueryString(" FieldName")
10-7-2 Request物件的表單處理 • Request物件的表單處理除了可以使用使用表單方式來傳遞資料外,還可以使用超連結URL參數來傳送資料給其他ASP.NET程式。 • URL超連結傳遞的參數或表單GET方法傳遞的內容,都是使用QueryString集合物件,POST方法是使用Form集合物件來取得URL參數或欄位值,如下所示: name = Request("Username") pass = Request("Password") • 程式碼沒有指定QueryString或Form集合物件,換句話說,它可以取得URL參數和表單POST方法傳遞的參數,右邊括號內是參數或欄位名稱字串。
10-8 跨程式的Web表單送回-說明 • ASP.NET 2.0版可以使用PreviousPage物件執行跨ASP.NET程式的Web表單送回。換句話說,我們可以將Web表單處理程式指定成其他ASP.NET程式(預設是自己),也就是將欄位資料傳遞給其他ASP.NET程式。
10-8 跨程式的Web表單送回-指定Web表單處理程式 • ASP.NET 2.0版可以使用PreviousPage物件執行跨ASP.NET程式的Web表單送回。換句話說,我們可以將Web表單處理程式指定成其他ASP.NET程式(預設是自己),也就是將欄位資料傳遞給其他ASP.NET程式。 • 在Web表單的Button控制項可以使用PostBackUrl屬性來指定表單送回的ASP.NET程式,如下所示: <asp:Button Id="Button" Text="下一步" Runat="server" PostBackUrl="Ch10-8Second.aspx"/> • 上述Button控制項指定表單送回至ASP.NET程式Ch10-8Second.aspx。