51
10 10 Web Web 第第第第第第第第第 第第第第第第第第第 10-1 Web 10-1 Web 第第第第第第第 第第第第第第第 10-2 10-2 第第 第第 ASP.NET ASP.NET Web Web 第第第第 第第第第 10-3 10-3 第第第第第第第第 第第第第第第第第 10-4 Application 10-4 Application Session Session 第第 第第 10-5 Global.asax 10-5 Global.asax 第第第第第 第第第第第 10-6 Cookies 10-6 Cookies 第第第 第第第 10-7 Request 10-7 Request 第第第第第第第 第第第第第第第 10-8 10-8 第第第第 第第第第 Web Web 第第第第 第第第第

第 10 章 Web應用程式的資料分享

  • Upload
    fergus

  • View
    66

  • Download
    1

Embed Size (px)

DESCRIPTION

第 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 應用程式. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 10 章  Web應用程式的資料分享

第第 1010 章 章 WebWeb應用程式的資應用程式的資料分享料分享

10-1 Web10-1 Web 應用程式的基礎應用程式的基礎 10-2 10-2 設定設定 ASP.NETASP.NET的的WebWeb 應用程式應用程式 10-3 10-3 網頁間的資料分享網頁間的資料分享 10-4 Application10-4 Application與與 SessionSession 物件物件 10-5 Global.asax10-5 Global.asax 檔案的使用檔案的使用 10-6 Cookies10-6 Cookies 的處理的處理 10-7 Request10-7 Request 物件的表單處理物件的表單處理 10-8 10-8 跨程式的跨程式的 WebWeb 表單送回表單送回

Page 2: 第 10 章  Web應用程式的資料分享

10-1 Web10-1 Web應用程式的基礎應用程式的基礎 10-1-1 10-1-1 在在 IISIIS 建立建立 WebWeb 應用程式應用程式 10-1-2 10-1-2 在在 VWDVWD 測試伺服器建立測試伺服器建立 WebWeb 應用程式應用程式

Page 3: 第 10 章  Web應用程式的資料分享

10-1 Web10-1 Web 應用程式的基礎應用程式的基礎 ASP.NETASP.NET 「應用程式」(「應用程式」( ApplicationApplication

ss )是指使用)是指使用 ASP.NETASP.NET 技術建立的技術建立的 WebWeb應用程式,它是由網頁相關檔案所組成,應用程式,它是由網頁相關檔案所組成,可以完成特定工作的應用程式。可以完成特定工作的應用程式。

ASP.NETASP.NET 應用程式簡單的說就是一應用程式簡單的說就是一種種 .NET Framework.NET Framework 應用程式,因為它是應用程式,因為它是在在WebWeb 伺服器上執行的應用程式,所以稱伺服器上執行的應用程式,所以稱為為WebWeb 應用程式。應用程式。

Page 4: 第 10 章  Web應用程式的資料分享

10-1-1 10-1-1 在在 IISIIS 建立建立 WebWeb 應用程應用程式式

在在 IISIIS的的WebWeb 伺服器能夠將整個網站,或指定網伺服器能夠將整個網站,或指定網站目錄建立成站目錄建立成 WebWeb 應用程式。並且能夠在同一應用程式。並且能夠在同一個網站建立多個個網站建立多個 WebWeb 應用程式,每一個虛擬目應用程式,每一個虛擬目錄都可以建立成為錄都可以建立成為 WebWeb 應用程式。應用程式。

在在 IISIIS 建立建立 WebWeb 應用程式的方法,如下所示:應用程式的方法,如下所示:• 在在 IISIIS 新增網站:主目錄預設是一個新增網站:主目錄預設是一個 WebWeb 應用程式。應用程式。• 網站虛擬目錄(網站虛擬目錄( Virtual DirectoriesVirtual Directories ):當目錄新增):當目錄新增

成為虛擬目錄或成為虛擬目錄或 WebWeb 共用時,如果目錄擁有共用時,如果目錄擁有【【指令指令碼碼】】權限,它就是一個權限,它就是一個 WebWeb 應用程式,詳細步驟請參應用程式,詳細步驟請參閱第閱第 1-5-31-5-3 節。節。

• 主目錄下實際路徑的子目錄:預設與上一層主目錄屬主目錄下實際路徑的子目錄:預設與上一層主目錄屬於同一個於同一個 WebWeb 應用程式。應用程式。

Page 5: 第 10 章  Web應用程式的資料分享

10-1-2 10-1-2 在在 VWDVWD 測試伺服器建立測試伺服器建立WebWeb 應用程式應用程式 -1-1

VWDVWD 內建測試內建測試 ASP.NETASP.NET 程式執行的程式開發伺程式執行的程式開發伺服器,事實上,它就是服器,事實上,它就是 1.0/1.11.0/1.1 版名為版名為 CassiniCassini的個人的個人 WebWeb 伺服器,這是支援伺服器,這是支援 ASP.NETASP.NET 技術的技術的WebWeb 伺服器,可以在非伺服器,可以在非 IISIIS 環境測試執行環境測試執行ASP.NETASP.NET 應用程式。應用程式。

當當 VWDVWD 開啟「開啟「 Ch10Ch10 」資料夾網站和執行」資料夾網站和執行ASP.NETASP.NET 程式程式 Default.aspxDefault.aspx 時,就會在工作列時,就會在工作列建立程式開發伺服器圖示,如下圖所示:建立程式開發伺服器圖示,如下圖所示:

Page 6: 第 10 章  Web應用程式的資料分享

10-1-2 10-1-2 在在 VWDVWD 測試伺服器建立測試伺服器建立WebWeb 應用程式應用程式 -2-2

在程式開發伺服器的圖示,執行右鍵在程式開發伺服器的圖示,執行右鍵【【顯示詳細顯示詳細資訊資訊】】指令,可以看到伺服器的詳細資訊,一個指令,可以看到伺服器的詳細資訊,一個VWDVWD 的程式開發伺服器只能建立一個的程式開發伺服器只能建立一個 WebWeb 應用應用程式,以此例它是在埠號程式,以此例它是在埠號 10591059 建立建立 WebWeb 應用應用程式。程式。

Page 7: 第 10 章  Web應用程式的資料分享

10-2 10-2 設定設定 ASP.NETASP.NET的的 WebWeb 應用程應用程式式

10-2-1 Web.Config10-2-1 Web.Config 組態檔組態檔 10-2-2 Web10-2-2 Web 介面的網站管理工具介面的網站管理工具

Page 8: 第 10 章  Web應用程式的資料分享

10-2-1 Web.Config10-2-1 Web.Config 組態檔組態檔 -- 說說明明

WebWeb 組態檔是組態檔是 ASP.NETASP.NET 技術技術 WebWeb 應用程應用程式的資源設定檔案,它是一份式的資源設定檔案,它是一份 XMLXML 文件,文件,內含內含 WebWeb 應用程式相關設定的應用程式相關設定的 XMLXML 標籤,標籤,可以用來簡化可以用來簡化 ASP.NETASP.NET 應用程式的設定。應用程式的設定。

雖然我們可以自行編輯位在雖然我們可以自行編輯位在 WebWeb 應用程式應用程式根目錄的根目錄的 Web.ConfigWeb.Config 組態檔內容,不過,組態檔內容,不過,另一種簡單方式是直接使用下一節的另一種簡單方式是直接使用下一節的 WebWeb介面網站管理工具,使用它來更改介面網站管理工具,使用它來更改Web.ConfigWeb.Config 檔案的相關設定。檔案的相關設定。

Page 9: 第 10 章  Web應用程式的資料分享

10-2-1 Web.Config10-2-1 Web.Config 組態檔組態檔 -- 範範例例

<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?><configuration><configuration> <appSettings/><appSettings/> <connectionStrings><connectionStrings> <add name="iPodsConnectionString" <add name="iPodsConnectionString" connectionString="Provider=…"connectionString="Provider=…" providerName="System.Data.OleDb" />providerName="System.Data.OleDb" /> </connectionStrings></connectionStrings> <system.web><system.web> <compilation debug="false" /><compilation debug="false" /> <authentication mode="Windows" /><authentication mode="Windows" /> <customErrors mode="RemoteOnly" <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /><error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound.htm" /><error statusCode="404" redirect="FileNotFound.htm" /> </customErrors></customErrors> </system.web></system.web></configuration></configuration>

Page 10: 第 10 章  Web應用程式的資料分享

10-2-2 Web10-2-2 Web 介面的網站管理工具介面的網站管理工具 --啟動啟動

在在 Visual Web DeveloperVisual Web Developer 提供提供 WebWeb 介面的介面的ASP.NETASP.NET 網站管理工具,請啟動網站管理工具,請啟動 VWDVWD 開啟開啟「「 Ch10Ch10 」網站後,執行「網站」→「」網站後,執行「網站」→「 ASP.NETASP.NET組態」指令,可以開啟瀏覽程式進入組態」指令,可以開啟瀏覽程式進入 WebWeb 介面介面管理工具,如下圖所示:管理工具,如下圖所示:

Page 11: 第 10 章  Web應用程式的資料分享

10-2-2 Web10-2-2 Web 介面的網站管理工具介面的網站管理工具 --安全性標籤安全性標籤

在此標籤可以建立在此標籤可以建立 WebWeb 應用程式的安全設應用程式的安全設定,包含驗證方式、建立和管理使用者、定,包含驗證方式、建立和管理使用者、角色和存取規則,詳細說明請參閱第角色和存取規則,詳細說明請參閱第 1717 章。章。

Page 12: 第 10 章  Web應用程式的資料分享

10-2-2 Web10-2-2 Web 介面的網站管理工具介面的網站管理工具 --應用程式標籤應用程式標籤

在此標籤可以更改在此標籤可以更改 WebWeb 應用程式設定、設應用程式設定、設定定 SMTPSMTP 伺服器、更改應用程式狀態和除伺服器、更改應用程式狀態和除錯與追蹤模式,如下圖所示:錯與追蹤模式,如下圖所示:

Page 13: 第 10 章  Web應用程式的資料分享

10-2-2 Web10-2-2 Web 介面的網站管理工具介面的網站管理工具 --提供者標籤提供者標籤

在此標籤可以設定資料來源提供者(在此標籤可以設定資料來源提供者( Data Data ProviderProvider ),預設使用),預設使用AspNetSqlProviderAspNetSqlProvider 提供者。提供者。

Page 14: 第 10 章  Web應用程式的資料分享

10-3 10-3 網頁間的資料分享網頁間的資料分享 10-3-1 10-3-1 在網頁間分享資料在網頁間分享資料 10-3-2 10-3-2 網頁間資料分享的方法網頁間資料分享的方法

Page 15: 第 10 章  Web應用程式的資料分享

10-3-1 10-3-1 在網頁間分享資料在網頁間分享資料 -- 說明說明 當使用者進入網站,因為當使用者進入網站,因為 HTTPHTTP 通訊協定通訊協定

並不會保留客戶端的使用者狀態,在伺服並不會保留客戶端的使用者狀態,在伺服端根本不知道瀏覽端有哪些使用者正在瀏端根本不知道瀏覽端有哪些使用者正在瀏覽和其使用狀態。覽和其使用狀態。

例如:在移至其他例如:在移至其他 ASP.NETASP.NET 程式時,使用程式時,使用者資料並不會自動傳給下一頁,除非瀏覽者資料並不會自動傳給下一頁,除非瀏覽每一頁時都讓使用者在每一頁時都讓使用者在 WebWeb 表單重新輸入表單重新輸入一次。一次。

Page 16: 第 10 章  Web應用程式的資料分享

10-3-1 10-3-1 在網頁間分享資料在網頁間分享資料 -- 種類種類 分享給網站所有的使用者:在分享給網站所有的使用者:在 ASP.NETASP.NET 程程

式就是使用式就是使用 ApplicationApplication 變數進行分享,變數進行分享,例如:目前線上的使用者計數。例如:目前線上的使用者計數。

針對每位使用者的專屬資料:在針對每位使用者的專屬資料:在 ASP.NETASP.NET程式就是程式就是 SessionSession 變數的分享資料,例如:變數的分享資料,例如:登入使用者的個人資料。登入使用者的個人資料。

Page 17: 第 10 章  Web應用程式的資料分享

10-3-2 10-3-2 網頁間資料分享的方法網頁間資料分享的方法 ASP.NETASP.NET 的資料分享方法,如下所示:的資料分享方法,如下所示:

• ApplicationApplication和和 SessionSession 物件。物件。• ASP.NET 2.0ASP.NET 2.0 版的版的 ProfileProfile 物件,請參閱第物件,請參閱第 1717

章。章。• 使用使用 CookiesCookies 保留在客戶端電腦。保留在客戶端電腦。•將將WebWeb 表單處理程式指定成其他表單處理程式指定成其他 ASP.NETASP.NET 程程

式,就可以將欄位資料傳遞到其他式,就可以將欄位資料傳遞到其他 ASP.NETASP.NET程式,即跨程式,即跨 ASP.NETASP.NET 程式的表單送回。程式的表單送回。

• RequestRequest 物件配合表單或網址物件配合表單或網址 URLURL 參數,將參數,將欄位資料和參數傳到其他欄位資料和參數傳到其他 ASP.NETASP.NET 程式,即程式,即ASP 3.0ASP 3.0 版的表單處理。版的表單處理。

Page 18: 第 10 章  Web應用程式的資料分享

10-4 Application10-4 Application與與 SessionSession 物物件件

10-4-1 Application10-4-1 Application與與 SessionSession 物件的基礎物件的基礎 10-4-2 Application10-4-2 Application 變數的使用變數的使用 10-4-3 Session10-4-3 Session 變數的使用變數的使用

Page 19: 第 10 章  Web應用程式的資料分享

10-4-1 Application10-4-1 Application與與 SessionSession 物件物件的基礎的基礎 -- 說明說明

在在 ASP.NETASP.NET的的WebWeb 應用程式擁有一個應用程式擁有一個ApplicationApplication 物件,針對每一位使用者擁有物件,針對每一位使用者擁有對應的對應的 SessionSession 物件,如下圖所示:物件,如下圖所示:

Page 20: 第 10 章  Web應用程式的資料分享

10-4-1 Application10-4-1 Application與與 SessionSession 物件物件的基礎的基礎 -Application-Application 物件物件

ApplicationApplication 物件的主要目的是建立物件的主要目的是建立ApplicationApplication 變數的集合物件,可以提供進變數的集合物件,可以提供進入入WebWeb 應用程式的每位使用者一個資料分應用程式的每位使用者一個資料分享的管道。它允許客戶端的每位使用者存享的管道。它允許客戶端的每位使用者存取取 ApplicationApplication 變數。以此例使用者變數。以此例使用者 11 和和22 都可以存取都可以存取 ApplicationApplication 變數。變數。

ApplicationApplication 物件存在期間是在第物件存在期間是在第 11 個個SessionSession 物件建立後產生,直到物件建立後產生,直到 WebWeb 伺服伺服器關機且所有的使用者都離線後器關機且所有的使用者都離線後 WebWeb 應用應用程式結束後才會關閉。程式結束後才會關閉。

Page 21: 第 10 章  Web應用程式的資料分享

10-4-1 Application10-4-1 Application與與 SessionSession 物件物件的基礎的基礎 -Session-Session 物件物件

ASP.NETASP.NET的的【【 SessionSession 期間期間】】是指是指 WebWeb 應用程應用程式從一頁式從一頁 ASP.NETASP.NET 網頁移到其他網頁移到其他 ASP.NETASP.NET 網頁網頁過程中所花費的時間。過程中所花費的時間。 ASP.NETASP.NET 技術提供相關技術提供相關類別來管理類別來管理 SessionSession 期間的資訊,也就是建立期間的資訊,也就是建立SessionSession 物件來保留物件來保留 SessionSession 期間的資料。期間的資料。

當一位尚未建立當一位尚未建立 SessionSession 物件的使用者執行物件的使用者執行WebWeb 應用程式的應用程式的 ASP.NETASP.NET 程式時,伺服器就會程式時,伺服器就會自動建立一個對應的自動建立一個對應的 SessionSession 物件,而且指定唯物件,而且指定唯一的一的 Session IDSession ID 編號。例如:上述圖例的每一位編號。例如:上述圖例的每一位使用者都擁有專屬使用者都擁有專屬 IDID的的 SessionSession 物件,只允許物件,只允許對應使用者存取對應使用者存取 SessionSession 變數,在同一個變數,在同一個 WebWeb應用程式的其他使用者並不能存取。應用程式的其他使用者並不能存取。

Page 22: 第 10 章  Web應用程式的資料分享

10-4-2 Application10-4-2 Application 變數的使用變數的使用 --11

不論網站的不論網站的 WebWeb 應用程式有多少位使用者進入,應用程式有多少位使用者進入,對於每一個對於每一個 ApplicationApplication 變數,伺服端都只會在變數,伺服端都只會在記憶體保留一份資料,變數的基本格式如下:記憶體保留一份資料,變數的基本格式如下:Application("Page_Counter") = 0Application("Page_Counter") = 0

上述變數名稱和上述變數名稱和 ASP.NETASP.NET 程式變數不太一樣,程式變數不太一樣,這是一個字串這是一個字串 "Page_Counter""Page_Counter" ,加上,加上Application()Application() 來取得集合物件的指定元素,它可來取得集合物件的指定元素,它可以將以將 ApplicationApplication 變數變數 Page_CounterPage_Counter 設為零。設為零。

Page 23: 第 10 章  Web應用程式的資料分享

10-4-2 Application10-4-2 Application 變數的使用變數的使用 --22

為了避免資料存取衝突的情況,因為為了避免資料存取衝突的情況,因為 22 位使用者位使用者同時讀取同時讀取 ApplicationApplication 變數並沒有關係,如果一變數並沒有關係,如果一位更改,一位讀取位更改,一位讀取 ApplicationApplication 變數,在這種情變數,在這種情況下衝突就會發生,為了避免這種情況下衝突就會發生,為了避免這種情況,況, ApplicationApplication 的方法可以保障在同一時間內的方法可以保障在同一時間內只允許一位使用者存取只允許一位使用者存取 ApplicationApplication 變數,如下變數,如下所示:所示:Application.Lock()Application.Lock()

Application("Page_Counter") = _Application("Page_Counter") = _

Application("Page_Counter")+1Application("Page_Counter")+1

Application.Unlock()Application.Unlock()

Page 24: 第 10 章  Web應用程式的資料分享

10-4-3 Session10-4-3 Session 變數的使用變數的使用 -- 說說明明

SessionSession 變數是附屬在進入變數是附屬在進入 WebWeb 應用程式應用程式使用者的使用者的 SessionSession 期間,每一位使用者擁期間,每一位使用者擁有一組專屬有一組專屬 SessionSession 變數,雖然每位使用變數,雖然每位使用者的者的 SessionSession 變數名稱相同,但是內容可變數名稱相同,但是內容可能完全不同,而且只有該使用者執行的能完全不同,而且只有該使用者執行的ASP.NETASP.NET 程式才能夠存取自己專屬的程式才能夠存取自己專屬的SessionSession 變數。變數。

Page 25: 第 10 章  Web應用程式的資料分享

10-4-3 Session10-4-3 Session 變數的使用變數的使用 -- 方法與方法與屬性屬性

方法 說明Abandon() 使用者建立的 Session變數都會被清除掉,也就是說再也不

能存取 Session變數值Remove() 刪除指定的 Session變數,參數是 Session變數的名稱字串

屬性 說明TimeOut 設定每一個 Session期間的持續時間,以分鐘計,如果超過

時間,Session變數將自動刪除SessionID 取得使用者唯一的 Session編號,此為唯讀屬性

IsNewSession 是否是新的 Session期間

Page 26: 第 10 章  Web應用程式的資料分享

10-4-3 Session10-4-3 Session 變數的使用變數的使用 -- 傳遞資傳遞資料料

SessionSession 變數可以在網頁間分享資料,換句話說,變數可以在網頁間分享資料,換句話說,我們可以使用我們可以使用 SessionSession 變數將變數將 WebWeb 表單輸入資表單輸入資料傳遞給其他料傳遞給其他 ASP.NETASP.NET 程式,如下所示:程式,如下所示:

Session("UserName") = name.TextSession("UserName") = name.TextSession("UserPassword") = pass.TextSession("UserPassword") = pass.Text 只要使用者沒有超過只要使用者沒有超過 SessionSession 期間或執行期間或執行

Abandon()Abandon() 方法,在期間內執行其他方法,在期間內執行其他 ASP.NETASP.NET程式,都可以存取上述程式,都可以存取上述 SessionSession 變數值,如下所變數值,如下所示:示:

name = Session("UserName")name = Session("UserName")password = Session("UserPassword")password = Session("UserPassword")

Page 27: 第 10 章  Web應用程式的資料分享

10-5 Global.asax10-5 Global.asax 檔案的使用檔案的使用 10-5-1 10-5-1 在在 VWDVWD 新增新增 Global.asaxGlobal.asax 檔案檔案 10-5-2 Global.asax10-5-2 Global.asax 檔案的架構檔案的架構 10-5-3 Global.asax10-5-3 Global.asax 檔案的使用檔案的使用

Page 28: 第 10 章  Web應用程式的資料分享

10-5 Global.asax10-5 Global.asax 檔案的使用檔案的使用 Global.asaxGlobal.asax 是選擇性檔案,在是選擇性檔案,在 ASP.NETASP.NET的的WebWeb 應用程式並不一定需要此檔案,除應用程式並不一定需要此檔案,除非非WebWeb 應用程式需要使用到應用程式需要使用到 ApplicationApplication和和 SessionSession 物件的事件,因為這些事件處物件的事件,因為這些事件處理程序是位在理程序是位在 Global.asaxGlobal.asax 檔案。檔案。

在在 ASP.NETASP.NET的的WebWeb 應用程式新增應用程式新增Global.asaxGlobal.asax 檔案時,請注意!一個檔案時,請注意!一個 WebWeb應用程式只能擁有唯一的應用程式只能擁有唯一的 Global.asaxGlobal.asax 檔檔案,其位置是案,其位置是 WebWeb 應用程式的根目錄。應用程式的根目錄。

Page 29: 第 10 章  Web應用程式的資料分享

10-5-1 10-5-1 在在 VWDVWD 新增新增 Global.asaxGlobal.asax檔案檔案

ASP.NETASP.NET的的 Global.asaxGlobal.asax 檔案是檔案是 ANSIANSI 文文字檔案,使用字檔案,使用 WindowsWindows 記事本或記事本或 VWDVWD 都都可以編輯可以編輯 Global.asaxGlobal.asax 檔案的內容。在檔案的內容。在Visual Web DeveloperVisual Web Developer 新增新增Global.asaxGlobal.asax 檔案的步驟,如下所示:檔案的步驟,如下所示:• 1. 1. 請啟動請啟動 VWDVWD 開啟「開啟「 Ch10Ch10 」網站後,執行」網站後,執行

「檔案」→「新增」→「檔案」指令,可以看「檔案」→「新增」→「檔案」指令,可以看到「加入新項目」對話方塊。到「加入新項目」對話方塊。

• 2. 2. 選選【【全球應用程式類別全球應用程式類別】】(如果網站已經新(如果網站已經新增,就不會看到此項目),按增,就不會看到此項目),按【【加入加入】】鈕就可鈕就可以在網站新增以在網站新增 Global.asaxGlobal.asax 檔案。檔案。

Page 30: 第 10 章  Web應用程式的資料分享

10-5-2 Global.asax10-5-2 Global.asax 檔案的架構檔案的架構 --架架構構

<%@ Application Language="VB" %><%@ Application Language="VB" %><script Runat="server"><script Runat="server">Sub Application_Start(ByVal Sender As Object, _Sub Application_Start(ByVal Sender As Object, _ ByVal E As EventArgs)ByVal E As EventArgs)End SubEnd SubSub Application_End(ByVal Sender As Object, _Sub Application_End(ByVal Sender As Object, _ ByVal E As EventArgs)ByVal E As EventArgs)End SubEnd SubSub Application_Error(ByVal Sender As Object, _Sub Application_Error(ByVal Sender As Object, _ ByVal E As EventArgs)ByVal E As EventArgs)End SubEnd SubSub Session_Start(ByVal sender As Object, _Sub Session_Start(ByVal sender As Object, _ ByVal e As EventArgs)ByVal e As EventArgs)End SubEnd SubSub Session_End(ByVal sender As Object, _Sub Session_End(ByVal sender As Object, _ ByVal e As EventArgs)ByVal e As EventArgs)End SubEnd Sub</script></script>

Page 31: 第 10 章  Web應用程式的資料分享

10-5-2 Global.asax10-5-2 Global.asax 檔案的架構檔案的架構 -- 說說明明

事件處理程序 說明Application_Start() 當第 1位使用者進入 ASP.NET程式時,Application物件

的 Start事件就觸發,在觸發後,就算有成千上萬位使用者進入網站都不會重新觸發,除非Web伺服器關機。通常是用來初始 Application變數,例如:初始訪客計數

Application_End() 當Web伺服器關機,Application物件的 End事件就會觸發

Application_Error() 產生未能處理錯誤時,觸發 Application物件的 Error事件Session_Start() 當使用者建立 Session期間時,就觸發 Session物件的 Start

事件,如果有 50位使用者,就觸發 50次事件,每個事件是獨立觸發,不會互相影響,通常是用來初始使用者專屬

的 Session變數Session_End() 使用者在預設時間內沒有進入其他 ASP.NET程式,就會

觸發 Session物件的 End事件,時間是由 TimeOut屬性設定,通常是善後用途的程式碼,例如:將 Session變數存

入資料庫或文字檔案

Page 32: 第 10 章  Web應用程式的資料分享

10-5-3 Global.asax10-5-3 Global.asax 檔案的使用檔案的使用 --11

當使用者請求當使用者請求 ASP.NETASP.NET 程式後,就會替每位使程式後,就會替每位使用者建立用者建立 SessionSession 期間,接著檢查期間,接著檢查 ASP.NETASP.NET 應應用程式是否擁有用程式是否擁有 Global.asaxGlobal.asax 檔案。檔案。

如果有如果有 Global.asaxGlobal.asax 檔案,在執行檔案,在執行 ASP.NETASP.NET 檔檔案的程式碼前,如果是第案的程式碼前,如果是第 11 位使用者,就觸發位使用者,就觸發ApplicationApplication 物件的物件的 StartStart 事件,執行事件,執行Global.asaxGlobal.asax 檔案的檔案的 Application_Start()Application_Start() 事件事件處理程序,接著建立處理程序,接著建立 SessionSession 物件,因為物件,因為Global.asaxGlobal.asax 檔案存在,接著執行檔案存在,接著執行Session_Start()Session_Start() 事件處理程序。事件處理程序。

Page 33: 第 10 章  Web應用程式的資料分享

10-5-3 Global.asax10-5-3 Global.asax 檔案的使用檔案的使用 --22

當當 SessionSession 期間超過期間超過 TimeOutTimeOut 屬性的設定(預屬性的設定(預設設 2020 分鐘)或執行分鐘)或執行 Abandon()Abandon() 方法,表示方法,表示SessionSession 期間結束,就觸發期間結束,就觸發 SessionSession 物件的物件的 EndEnd事件執行事件執行 Session_End()Session_End() 事件處理程式,處理程事件處理程式,處理程序是在關閉序是在關閉 SessionSession 物件前執行。物件前執行。

WebWeb 伺服器如果關機,在關閉伺服器如果關機,在關閉 ApplicationApplication 物件物件前就會執行前就會執行 Application_End()Application_End() 事件處理程序,事件處理程序,當然也會結束所有使用者的當然也會結束所有使用者的 SessionSession 期間,和執期間,和執行所有使用者的行所有使用者的 Session_End()Session_End() 事件處理程序。事件處理程序。

Page 34: 第 10 章  Web應用程式的資料分享

10-6 Cookies10-6 Cookies 的處理的處理 10-6-1 Cookies10-6-1 Cookies 的基礎的基礎 10-6-2 10-6-2 新增新增 CookieCookie 10-6-3 10-6-3 取得取得 CookieCookie 的值的值 10-6-4 10-6-4 刪除刪除 CookieCookie 10-6-5 10-6-5 多鍵多鍵 CookieCookie 的使用的使用

Page 35: 第 10 章  Web應用程式的資料分享

10-6-1 Cookies10-6-1 Cookies 的基礎的基礎 -- 說明說明 CookiesCookies 的英文意義是小餅乾,源於這些的英文意義是小餅乾,源於這些儲存在客戶端電腦的檔案尺寸都很儲存在客戶端電腦的檔案尺寸都很小,小, CookiesCookies 儲存在瀏覽程式所在的電腦,儲存在瀏覽程式所在的電腦,所以並不會浪費所以並不會浪費WebWeb 伺服器的資源。伺服器的資源。

在在 ASP.NETASP.NET 程式只需檢查客戶端是否有儲程式只需檢查客戶端是否有儲存存 CookieCookie ,在取得,在取得 CookieCookie 的保留資訊後,的保留資訊後,就可以輕鬆建立複雜的就可以輕鬆建立複雜的 WebWeb 應用程式。應用程式。

Page 36: 第 10 章  Web應用程式的資料分享

10-6-1 Cookies10-6-1 Cookies 的基礎的基礎 -- 用途用途 CookiesCookies 在網站實作上的應用相當多,使在網站實作上的應用相當多,使用用 CookiesCookies 保留的資料大都屬於幾個方面,保留的資料大都屬於幾個方面,如下所示:如下所示:• 個人資訊:使用個人資訊:使用 CookiesCookies 保留個人資訊,例如:保留個人資訊,例如:

使用者名稱、時區、帳號和造訪網站的次數等。使用者名稱、時區、帳號和造訪網站的次數等。• 個人化資訊:個人化資訊: CookiesCookies 可以定製個人化的網站可以定製個人化的網站外觀和個人偏好的網站內容,或是記錄使用者外觀和個人偏好的網站內容,或是記錄使用者有興趣的資訊。有興趣的資訊。

• 網站購物車:線上購物車需要保留使用者選擇網站購物車:線上購物車需要保留使用者選擇的商品清單,的商品清單, CookiesCookies 就可以用來記錄這些選就可以用來記錄這些選購商品。購商品。

Page 37: 第 10 章  Web應用程式的資料分享

10-6-2 10-6-2 新增新增 CookieCookie

CookieCookie 是一種集合物件,可以使用名稱存取是一種集合物件,可以使用名稱存取CookieCookie值,新增值,新增 CookieCookie 是使用是使用 ResponseResponse 物物件的件的 CookiesCookies 屬性來新增屬性來新增 CookieCookie ,其程式碼如,其程式碼如下所示:下所示:

Dim name As String = "Dim name As String = " 江小魚江小魚 ""Response.Cookies("UserName").Value = nameResponse.Cookies("UserName").Value = name 在新增在新增 CookieCookie 後還需要設定後還需要設定 CookieCookie的的 ExpiresExpires

屬性,即屬性,即 CookieCookie 檔案存在客戶端電腦的期限,檔案存在客戶端電腦的期限,如下所示:如下所示:

Dim dtDay As Date = DateAdd("D", 10, Today)Dim dtDay As Date = DateAdd("D", 10, Today)Response.Cookies("UserName").Expires = dtDayResponse.Cookies("UserName").Expires = dtDay

Page 38: 第 10 章  Web應用程式的資料分享

10-6-3 10-6-3 取得取得 CookieCookie 的值的值 在客戶端電腦如果擁有在客戶端電腦如果擁有

CookieCookie,, ASP.NETASP.NET 程式可以使用程式可以使用RequestRequest 物件的物件的 CookiesCookies 集合物件來取得集合物件來取得指定的指定的 CookieCookie 值,如下所示:值,如下所示:

name = Request.Cookies("UserName").Valuename = Request.Cookies("UserName").Value

上述程式碼可以取得上述程式碼可以取得 CookieCookie 名稱名稱UserNameUserName 的值,並且將它指定給變數的值,並且將它指定給變數namename 。。

Page 39: 第 10 章  Web應用程式的資料分享

10-6-4 10-6-4 刪除刪除 CookieCookie

客戶端的客戶端的 CookieCookie 如果不再需要,在如果不再需要,在ASP.NETASP.NET 程式可以刪除程式可以刪除 CookieCookie ,刪除方,刪除方式是將式是將 ExpiresExpires 屬性設定成過期的時間,屬性設定成過期的時間,如下所示:如下所示:

Dim dtDay As Date = DateAdd("D", -365, Today)Dim dtDay As Date = DateAdd("D", -365, Today)

Response.Cookies("UserName").Expires = dtDayResponse.Cookies("UserName").Expires = dtDay

上述程式碼將有效期限設為一年前,因為上述程式碼將有效期限設為一年前,因為CookieCookie 已經過期,換句話說,就是刪除已經過期,換句話說,就是刪除CookieCookie 。。

Page 40: 第 10 章  Web應用程式的資料分享

10-6-5 10-6-5 多鍵多鍵 CookieCookie 的使用的使用 -- 說說明明

CookieCookie 是一種目錄結構的集合物件,在同是一種目錄結構的集合物件,在同名名 CookieCookie 下可以擁有不同下可以擁有不同 KeyKey 的鍵名。的鍵名。換句話說,同一個換句話說,同一個 CookieCookie 名稱就可以儲存名稱就可以儲存多種資料。多種資料。

Page 41: 第 10 章  Web應用程式的資料分享

10-6-5 10-6-5 多鍵多鍵 CookieCookie 的使用的使用 -- 新增多新增多鍵的鍵的 CookieCookie

在在 ASP.NETASP.NET 程式新增多鍵程式新增多鍵 CookieCookie ,需要,需要在名稱後再加上鍵名,如下所示:在名稱後再加上鍵名,如下所示:

Response.Cookies("User")("UserName") = "Response.Cookies("User")("UserName") = " 陳會安陳會安 ""

Response.Cookies("User")("Password") = "1234" Response.Cookies("User")("Password") = "1234"

Response.Cookies("User").Expires = _Response.Cookies("User").Expires = _

DateAdd("D",10,Today)DateAdd("D",10,Today)

Page 42: 第 10 章  Web應用程式的資料分享

10-6-5 10-6-5 多鍵多鍵 CookieCookie 的使用的使用 -- 取得多取得多鍵的鍵的 CookieCookie 值值

多鍵多鍵 CookieCookie 如同陣列,取得如同陣列,取得 CookieCookie 值時值時不只需要指定名稱,還需要指定鍵名,如不只需要指定名稱,還需要指定鍵名,如下所示:下所示:

name = _name = _

Request.Cookies("User")("UserName") Request.Cookies("User")("UserName")

pass = Request.Cookies("User")("Password")pass = Request.Cookies("User")("Password")

Page 43: 第 10 章  Web應用程式的資料分享

10-6-5 10-6-5 多鍵多鍵 CookieCookie 的使用的使用 --刪除多刪除多鍵的鍵的 CookieCookie

多鍵多鍵 CookieCookie 的刪除和第的刪除和第 10-6-410-6-4 節相同,節相同,只需將只需將 CookieCookie的的 ExpiresExpires 屬性設為過期屬性設為過期後,就可以刪除後,就可以刪除 CookieCookie 。如果只刪除。如果只刪除CookieCookie 其中一個鍵名,請將該鍵名設成空其中一個鍵名,請將該鍵名設成空字串即可,如下所示:字串即可,如下所示:

Response.Cookies("User")("Password") = "" Response.Cookies("User")("Password") = "" 上述程式碼刪除上述程式碼刪除 CookieCookie 名稱為名稱為 UserUser的的

PasswordPassword 鍵名。鍵名。

Page 44: 第 10 章  Web應用程式的資料分享

10-7 Request10-7 Request 物件的表單處理物件的表單處理 10-7-1 Form10-7-1 Form與與 QueryStringQueryString 集合物件集合物件 10-7-2 Request10-7-2 Request 物件的表單處理物件的表單處理

Page 45: 第 10 章  Web應用程式的資料分享

10-7-1 Form10-7-1 Form與與 QueryStringQueryString 集合物集合物件件 -ASP 3.0-ASP 3.0 版的表單處理版的表單處理

ASP 3.0ASP 3.0 版的表單處理就是使用版的表單處理就是使用 RequestRequest 物件的物件的FormForm與與 QueryStringQueryString集合物件來取得輸入資料,集合物件來取得輸入資料,如下所示:如下所示:• 傳統傳統 HTML/XHTMLHTML/XHTML 表單網頁:使用表單欄位以表單網頁:使用表單欄位以 HTTPHTTP

通訊協定的檔頭傳遞表單欄位資料,可以使用通訊協定的檔頭傳遞表單欄位資料,可以使用 POSTPOST或或 GETGET 方法,如下所示:方法,如下所示:

<form name="name" method="POST | GET" <form name="name" method="POST | GET"

action="URL">action="URL">

……… ………..

</form></form>• URLURL 參數:從瀏覽程式輸入的網址傳遞參數,其總長參數:從瀏覽程式輸入的網址傳遞參數,其總長度只有度只有 10241024 個字元。個字元。

Page 46: 第 10 章  Web應用程式的資料分享

10-7-1 Form10-7-1 Form與與 QueryStringQueryString 集合物集合物件件 -Form-Form集合物件集合物件

網頁表單如果使用網頁表單如果使用 POSTPOST 方法傳遞資料,方法傳遞資料,它是將傳遞資料在編碼後,透過它是將傳遞資料在編碼後,透過 HTTPHTTP 通通訊協定的標頭資料傳送到訊協定的標頭資料傳送到 WebWeb 伺服器,在伺服器,在伺服端可以使用伺服端可以使用 FormForm 集合物件來取出資集合物件來取出資料,其語法如下所示:料,其語法如下所示:Request(("FieldName")Request(("FieldName")

Request.Form("FieldName")Request.Form("FieldName")

Page 47: 第 10 章  Web應用程式的資料分享

10-7-1 Form10-7-1 Form與與 QueryStringQueryString 集合物集合物件件 -QueryString-QueryString 集合物件集合物件

網頁表單如果使用網頁表單如果使用 GETGET 方法傳遞資料,就是將傳方法傳遞資料,就是將傳遞資料編碼後,透過遞資料編碼後,透過 URLURL 網址後的字串傳送到網址後的字串傳送到WebWeb 伺服器,參數是位在問號之後,如果參數不伺服器,參數是位在問號之後,如果參數不只一個,請使用「只一個,請使用「 && 」符號分隔,如下所示:」符號分隔,如下所示:

http://localhost/Ch10-7-2.aspx?http://localhost/Ch10-7-2.aspx?fname1=value1&fname2=value2fname1=value1&fname2=value2

當瀏覽程式輸入上述網址,按下當瀏覽程式輸入上述網址,按下 EnterEnter 鍵後,伺鍵後,伺服端就可以使用服端就可以使用 QueryStringQueryString集合物件來取出資集合物件來取出資料,如下所示:料,如下所示:

Request(("FieldName")Request(("FieldName")Request.QueryString(" FieldName")Request.QueryString(" FieldName")

Page 48: 第 10 章  Web應用程式的資料分享

10-7-2 Request10-7-2 Request 物件的表單處理物件的表單處理 RequestRequest 物件的表單處理除了可以使用使用表單物件的表單處理除了可以使用使用表單

方式來傳遞資料外,還可以使用超連結方式來傳遞資料外,還可以使用超連結 URLURL 參數參數來傳送資料給其他來傳送資料給其他 ASP.NETASP.NET 程式。程式。

URLURL超連結傳遞的參數或表單超連結傳遞的參數或表單 GETGET 方法傳遞的方法傳遞的內容,都是使用內容,都是使用 QueryStringQueryString集合物件,集合物件, POSTPOST方法是使用方法是使用 FormForm集合物件來取得集合物件來取得 URLURL 參數或欄參數或欄位值,如下所示:位值,如下所示:name = Request("Username")name = Request("Username")pass = Request("Password")pass = Request("Password")

程式碼沒有指定程式碼沒有指定 QueryStringQueryString或或 FormForm集合物件,集合物件,換句話說,它可以取得換句話說,它可以取得 URLURL 參數和表單參數和表單 POSTPOST 方方法傳遞的參數,右邊括號內是參數或欄位名稱字法傳遞的參數,右邊括號內是參數或欄位名稱字串。串。

Page 49: 第 10 章  Web應用程式的資料分享

10-8 10-8 跨程式的跨程式的 WebWeb 表單送回表單送回 -- 說說明明

ASP.NET 2.0ASP.NET 2.0 版可以使用版可以使用 PreviousPagePreviousPage物件執行跨物件執行跨 ASP.NETASP.NET 程式的程式的 WebWeb 表單送表單送回。換句話說,我們可以將回。換句話說,我們可以將 WebWeb 表單處理表單處理程式指定成其他程式指定成其他 ASP.NETASP.NET 程式(預設是自程式(預設是自己),也就是將欄位資料傳遞給其他己),也就是將欄位資料傳遞給其他ASP.NETASP.NET 程式。程式。

Page 50: 第 10 章  Web應用程式的資料分享

10-8 10-8 跨程式的跨程式的 WebWeb 表單送回表單送回 -- 指指定定 WebWeb 表單處理程式表單處理程式

ASP.NET 2.0ASP.NET 2.0 版可以使用版可以使用 PreviousPagePreviousPage 物件執物件執行跨行跨 ASP.NETASP.NET 程式的程式的 WebWeb 表單送回。換句話說,表單送回。換句話說,我們可以將我們可以將 WebWeb 表單處理程式指定成其他表單處理程式指定成其他ASP.NETASP.NET 程式(預設是自己),也就是將欄位資程式(預設是自己),也就是將欄位資料傳遞給其他料傳遞給其他 ASP.NETASP.NET 程式。程式。

在在WebWeb 表單的表單的 ButtonButton控制項可以使用控制項可以使用PostBackUrlPostBackUrl 屬性來指定表單送回的屬性來指定表單送回的 ASP.NETASP.NET程式,如下所示:程式,如下所示:

<asp:Button Id="Button" Text="<asp:Button Id="Button" Text=" 下一步下一步 " " Runat="server"Runat="server" PostBackUrl="Ch10-8Second.aspx"/>PostBackUrl="Ch10-8Second.aspx"/> 上述上述 ButtonButton控制項指定表單送回至控制項指定表單送回至 ASP.NETASP.NET 程程式式 Ch10-8Second.aspxCh10-8Second.aspx 。。

Page 51: 第 10 章  Web應用程式的資料分享

10-8 10-8 跨程式的跨程式的 WebWeb 表單送回表單送回 -- 取取得跨程式得跨程式 WebWeb 表單的控制項表單的控制項

ASP.NETASP.NET 程式的程式的 Page_Load()Page_Load() 事件處理程序,事件處理程序,可以使用可以使用 FindControl()FindControl() 方法取得前一頁方法取得前一頁ASP.NETASP.NET 程式的控制項,如下所示:程式的控制項,如下所示:Dim txt As TextBoxDim txt As TextBoxtxt = PreviousPage.FindControl("user")txt = PreviousPage.FindControl("user")name.Text = txt.Textname.Text = txt.Texttxt = PreviousPage.FindControl("pass")txt = PreviousPage.FindControl("pass")pass.Text = txt.Textpass.Text = txt.Text

上述程式碼使用上述程式碼使用 PreviousPagePreviousPage 屬性取得前一頁屬性取得前一頁的的 PagePage 物件後,使用物件後,使用 FindControl()FindControl() 方法找尋方法找尋指定名稱的控制項,以此例是名為指定名稱的控制項,以此例是名為 useruser和和 passpass的的 22 個個 TextBoxTextBox控制項,然後取得控制項,然後取得 TextText 屬性的屬性的控制項值。控制項值。