1 / 44

第十六章 Application 和 Session 物件

第十六章 Application 和 Session 物件. 張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR 實驗室. 本章大綱. 大綱 本章介紹 Application 和 Session 物件的應用,並以計數器和網頁認證來進行範例說明。 主題 16-1 : Application 物件 16-2 : Session 物件 16-3 :應用範例. 16-1 : Application 物件. 本小節介紹 Application 物件的基本介紹與用法。.

ting
Download Presentation

第十六章 Application 和 Session 物件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第十六章Application 和 Session 物件 張智星 jang@mirlab.org http://mirlab.org/jang 台大資工系 MIR實驗室

  2. 本章大綱 • 大綱 • 本章介紹 Application 和 Session 物件的應用,並以計數器和網頁認證來進行範例說明。 • 主題 • 16-1:Application 物件 • 16-2:Session 物件 • 16-3:應用範例

  3. 16-1:Application 物件 • 本小節介紹Application物件的基本介紹與用法。

  4. Application的基本介紹 • 動機 • HTTP 是 stateless 的 connection。 • 伺服器對每一個 request ,除了 log 記錄外,並不會留下其他特別的記錄。 • 若要在不同的 request 之間分享資訊,必須保存或傳送資料,方法如下:

  5. Web 伺服器的執行環境 • Web 的應用程式(Application) • 虛擬目錄(由用戶端看到 Web 伺服器的第一層目錄)之下的所有 ASP 程式。 • 各地的用戶端,都可經由 Internet 呼叫同一個應用程式。 • Application 物件的用途: • 讓呼叫同一個應用程式的用戶端能接收一些共用的資訊 。

  6. Application 物件 • 提供四種方法(Methods)、兩個事件(Events)與兩個集合(Collections)。

  7. Application的方法 • 列表如下:

  8. Application的事件與集合 • 事件: • 集合:

  9. 範例:訪客計數器(1) • 概念: • 一次啟動 Application 物件時,將 Application("Counter") 設定為零。 • Application.Contents(“Counter”)簡寫成Application(“Counter”) 。 • 被計數的網頁中,將 Application("Counter") 的值加一。只要每次瀏覽此網頁,Application("Counter") 值就加一。

  10. 範例:訪客計數器(2) • 步驟 • 伺服器啟動後,在Web 應用程式中,若有任一網頁被點選,相關 Application 物件會啟動。 • ASP 解譯器在虛擬目錄下尋找 global.asa 的檔案(副檔名 ASA 代表 Active Server Application)。 • 執行global.asa中的 Application_OnStart() 函數。 • 在 Application_OnStart() 函數中,我們可將變數 Application("Counter") 的值預設為零,之後若有計數網頁,將此變數值加 1。

  11. 範例:訪客計數器(3) • 缺點 • 用戶端一再點選瀏覽器的「檢視/重新整理」或是 F5 按鈕,計數器就會一直累加。 • 解決方法:用 Session 物件。 • 伺服器重開機時,Application 物件會被清除。 • 解決方法:將計數資料寫入檔案。

  12. global.asa • 程式碼重點 • 說明 • Application_OnStart() :將變數 Application(“Counter”) 的值預設為零。

  13. 範例16-1: 計數網頁的完整範例 • 主題:使用 Application 物件的計數網頁的完整範例 • Webpage: remote host, local host • 程式碼重點 • 說明 • Application.Lock 鎖住 Application 物件,不讓其他使用者改變 Application 物件,避免同時 Requests 造成錯誤動作。 若 Application("Counter") 不存在, 則設定其為 0 鎖住 Application 物件, 不讓其他使用者改變 Application 物件的任何資訊 計數變數加1 解除 Application 物件的鎖定狀態

  14. 範例16-2: 計數網頁的簡化範例 • 主題:計數網頁的精簡範例 • Webpage: remote host, local host • 程式碼重點 • 說明 • 由於計數器只是一個小程式,發生少許誤差也無所謂,因此前一個完整的範例可改寫成此簡化的範例。 若 Application("Counter") 不存在, 則設定其為 0 計數變數加1

  15. 範例16-3: 獨立功能的計數網頁 • 主題:獨立功能的計數網頁 • Webpage: remote host, local host • 程式碼重點 • 說明 • 想將程式碼反覆用在不同的網頁,且每個網頁都有獨立的計數功能,只要將前一個範例的 “Counter” 代換為隨網頁而不同的變數。

  16. 範例16-4: 顯示計數器啟動時間 • 主題:顯示計數器啟動時間 • Webpage: remote host, local host • 程式碼重點 • 說明 • 如要知道計數器的上次啟動時間,可以使用另外一個變數Application(theStartTime) 記錄時間。 • theStartTime url 而變,可發揮獨立計數功能。 • 無論使用 JScript 或 VBScript,都可存取相同的 Application 物件與變數。 若伺服器起動後, 本網頁第一次被呼叫時的動作

  17. 範例16-5 • 主題:印出 Application.Contents 和 Application.StaticObjects • Webpage: remote host, local host • 程式碼重點 • 說明 • Application.Contents 和 Application.StaticObjects 都是 Dictionary 變數,可以直接用程式碼將其內容一一印出。

  18. 範例16-6 • 主題:刪除 Application 變數 • Webpage: remote host, local host • 程式碼重點 • 說明 • 可用 Application.Contents.Remove() 或 Application.Contents.Removeall() 刪除 Application 變數。 • 本範例刪除所有 Application 變數後,再印出 Application.Contents 和 Application.StaticObjects 的內容。

  19. Application 相關的常見應用 • Application 相關的常見應用 • 網頁記數器。 • 線上投票區。 • 更新正確上線人數(如聊天室)。

  20. 16-2:Session 物件 • 本節介紹Session物件的基本功能與範例。

  21. Session 的基本介紹 • 用途 • Session 物件可讓同一個使用者在不同的 Web 應用程式中共用資訊。 • 不同的 Request 中,可用 Session 物件藉著Cookies來保存資訊。 • Session 用來指定每個使用者的相關資訊。 • 條件 • 用戶端的 Cookies 功能必須是開啟的。

  22. Application vs. Session • Application 物件和 Session物件的比較: • Application 物件:讓同一個 Web 應用程式共用資訊。 • Session 物件:讓同一個使用者在不同的 Web 應用程式中共用資訊。

  23. Session物件 • 提供四種性質(Properties)、一種方法(Method)、兩個事件(Events)與兩個集合(Collections)。 • 作法 • 使用者點選某一個網頁時,伺服器就會對此使用者分配一個 session ID。 • 以 cookie 的方式記錄在用戶端。 • session ID 的有效期間為 20 分鐘。

  24. Session的性質 • 列表如下:

  25. Session的方法 • 列表如下:

  26. Session的事件與集合 • 事件: • 集合:

  27. 範例16-7 • 主題:顯示 Session.SessionID 及 Session.Timeout • Webpage: remote host, local host • 程式碼重點 • 說明 • Session.CodePage=950代表用戶端的預設語言是繁體中文(大五碼)。 • Session.LCID=1028代表用戶端所在的區域是台灣地區。

  28. 範例16-8 • 主題:改變 Session.LCID 來改變日期格式 • Webpage: remote host, local host • 程式碼重點 • 說明 • Session.LCID 用來指定區域代碼,根據不同的區域代碼,就可產生不同的日期字串。 • 必須將 Session.LCID 設定回原預設值,否則與地區相關的顯示(如日期等)會發生錯誤。

  29. Session_OnStart() 和 Session_OnEnd() • global.asa 檔案。 • Session 和 Application 物件都有 OnStart 和 OnEnd 。 • 執行順序: • Application和Session同時啟動,ASP 會先執行 Application_OnStart(),再執行Session_OnStart() • 若兩者同時結束,ASP 會先執行 Session_OnEnd(),再執行 Application_OnEnd() • 順序流程: • Application_OnStart() -->Session_OnStart() -->ASP scripts -->Session_OnEnd() --> Application_OnEnd()

  30. 範例:加強版訪客計數器(1) • 概念 • 使用 Session 及 Application 物件。 • 步驟 • 檢查 Session("PreviouslyOnLine")值,若是 false,則將其值改true,並將 Application("Counter") 加一。 • Application(“Counter”) 的值即代表此網頁被點選的次數。不因使用者短期(20分鐘)內點選「重新整理」而增加。

  31. 範例:加強版訪客計數器(2) • 優點 • 用戶端點選「重新整理」計數器值不會一再累加。 • 缺點: • 伺服器重開機時,Application 物件會被清除,所有的計數資料將消失。 • 解決方法:將計數資料寫入檔案。

  32. 範例16-9 • 主題:防止計數資料的竄改-方法一 • Webpage: remote host, local host • 程式碼重點 • 說明 • 本範例使用Session(“PreviouslyOnLine”) 的值,若是 false,則將值改為 true,並將 Application("Counter") 值加一。

  33. 範例16-10 • 主題:防止計數資料的竄改-方法二 • Webpage: remote host, local host • 說明 • 加上「獨立計數」、「計數器啟用時間」等功能,得到更完整的範例。

  34. 範例16-11 • 主題:記錄每日來訪人數(一天寫檔一次) • Webpage: remote host, local host • 程式碼重點 • 說明 • 將計數資料分為「頁次」和「人次」: • 頁次:網頁被點選的次數。 • 人次:網頁被不同的訪客點選的次數。 • 不會由於伺服器當機,造成所有計數資料流失。 • 寫檔的動作不是很頻繁,伺服器效能較不會降低。

  35. Session 物件其他相關應用 • 購物網站的購物車的應用 • 利用 Session 變數來記錄使用者所購買的物品、數量、價格等。 • 認證一次就能悠遊各個網頁 • 使用 Session 變數記錄認證是否成功,之後在不同的網頁檢查此變數即可,不需重複認證。 • 強迫一定要從網站的首頁進入 • 使用者從網站的首頁進入時,必須設定某一個特定的 Session 變數。系統會檢查此 Session 是否存在,若非,則轉址到網站的首頁。

  36. 16-3:應用範例 • 本節將使用「密碼認證」為範例,說明如何整合 client-side script 及 server-side script,以達到方便的密碼認證功能。

  37. 範例介紹 • 特色 • 不需用到 IIS 或伺服器作業系統本身的認證功能,也不需管理者(Administrator)權限即可使用。 • 使用方便,只需在被密碼保護的網頁導入(Include)一個檔案即可。 • 用session變數,每次認證後有效時間為 20 分鐘。 • 名詞解釋 • 目標網頁:被密碼保護的網頁。 • 來源網頁:包含「目標網頁」連結的網頁。

  38. 範例16-12(1) • 主題:由Session變數保存密碼認證 • 功能說明 • 使用者輸入正確的帳號密碼,則設定 Session("ok")為 true,同時在原視窗開啟目標網頁,並關閉認證視窗。 • 若帳號密碼不正確,則在認證視窗顯示原來的認證畫面。

  39. 範例16-12(2) • 使用步驟 • 使用者點選「秘密網頁」,就會開啟密碼認證視窗(見右上圖)。 • 正確的帳號和密碼填在文字欄位,點選「送出」,認證視窗會被關掉,並在原視窗顯示「秘密網頁」(見右下圖)。

  40. 範例16-12(3) • 範例各檔案說明與連結 • source.asp執行結果檢視原始碼此網頁包含目標網頁(target.asp)的連結。 • target.asp執行結果檢視原始碼目標網頁(被密碼保護之網頁),第一列程式碼即導入 auth.inc,以達到被密碼保護功能。 • auth.inc本頁任務為檢驗認證資訊是否存在: • 若存在,則不做任何事。 • 若不存在,則跳出認證視窗(auth.asp),請求輸入密碼,並在原視窗載入來源網頁(source.asp)。 • 需要密碼保護之網頁,導入此檔案,即可被保護。

  41. 範例16-12(4) • auth.asp執行結果檢視原始碼此頁之目的為進行密碼認證: • 若通過,則於原視窗開啟目標網頁(target.asp)。 • 若不通過,則請求重新輸入帳號、密碼。 • delauth.asp本頁之任務為消除認證資訊(即將變數 session("ok")設定為 False),並載入來源網頁(source.asp)。

  42. 範例16-12(5) • 執行流程 • 使用者從 source.asp (來源網頁)中點選 target.asp(目標網頁)。 • target.asp 檢查是否有已過正確認證(且時間不超過 20 分鐘),此資訊保留在 session("ok")。若此變數為 True,則顯示 target.asp。 • 若 session(“ok”) 為 False,則需要認證,此時跳出密碼認證網頁,並在原視窗載入 source.asp。 • 使用者在認證視窗輸入認證資訊,若錯誤,保持認證視窗開啟,並繼續要求認證資訊。 • 獲得正確認證資訊,則關閉認證視窗,設定 session("ok") 為 True,並在原視窗開啟 target.asp。

  43. 範例16-12(6) 「密碼保護網頁」程式流程 點選「秘密網頁」連結 嘗試在主視窗 載入目標網頁target.asp 設定 Session(" ok" )=true 由目標網頁 target.asp 所導入的auth.inc 來檢查 Session(“ok”) 是否為true? yes 在主視窗 顯示來源網頁 source.asp 跳出新視窗 載入 auth.asp 索取認證資訊 檢查帳號密碼 是否正確? no no yes 在主視窗 顯示目標網頁target.asp

  44. 範例16-12(7) • 說明 • 由auth.inc 負責認證。 • auth.inc檔中定義兩個函數,分別在用戶端與伺服端執行。 • getPassword:開啟新視窗,載入 auth.asp,以取得使用者的認證資訊。(這是用戶端執行的函數,只在認證資訊不存在時,才在用戶端被呼叫。) • authentication:在伺服器確認認證資訊是否已經存在於 sessionVariable。 • 存在:則直接回傳目標網頁。 • 不存在:則於回傳的網頁內加入用戶端的 JavaScript程式碼,以便跳出認證視窗。

More Related