第十六章Application和Session物件_第1页
第十六章Application和Session物件_第2页
第十六章Application和Session物件_第3页
第十六章Application和Session物件_第4页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十六章

Application和Session物件張智星jang@/jang台大資工系MIR實驗室本章大綱大綱本章介紹Application和Session物件的應用,並以計數器和網頁認證來進行範例說明。主題16-1:Application物件16-2:Session物件16-3:應用範例2/4516-1:Application物件本小節介紹Application物件的基本介紹與用法。3/45Application的基本介紹動機HTTP是stateless的connection。伺服器對每一個request,除了log記錄外,並不會留下其他特別的記錄。若要在不同的request之間分享資訊,必須保存或傳送資料,方法如下:方法溝通對象Cookies一個用戶端和伺服器之間的資料傳遞和保存Form經由表單進行網頁間的資料傳遞和保存Application物件一個Web應用程式和各用戶端間的資料傳遞和保存Session物件一個用戶端和各Web應用程式間的資料傳遞和保存4/45Web伺服器的執行環境Web的應用程式(Application)虛擬目錄(由用戶端看到Web伺服器的第一層目錄)之下的所有ASP程式。各地的用戶端,都可經由Internet呼叫同一個應用程式。Application物件的用途:讓呼叫同一個應用程式的用戶端能接收一些共用的資訊。5/45Application物件提供四種方法(Methods)、兩個事件(Events)與兩個集合(Collections)。6/45Application的方法列表如下:方法說明Lock鎖住Application物件,不讓其他使用者改變Application物件的任何資訊Unlock解除Lock狀態Contents.Remove(itemorindex)從Contents集合中刪除一個項目Contents.RemoveAll從Contents集合中刪除所有項目7/45Application的事件與集合事件:集合:事件說明OnStart啟動一個Application物件時所觸發的函數,此函數必須放在global.asa檔案OnEnd結束一個Application物件時所觸發的函數,此函數必須放在global.asa檔案集合說明Contents以程式碼加在Application物件的所有變數的集合StaticObjects以Object標籤加在Application物件的所有物件的集合8/45範例:訪客計數器(1)概念:一次啟動Application物件時,將Application("Counter")設定為零。Application.Contents(“Counter”)簡寫成Application(“Counter”)。被計數的網頁中,將Application("Counter")的值加一。只要每次瀏覽此網頁,Application("Counter")值就加一。9/45範例:訪客計數器(2)步驟伺服器啟動後,在Web應用程式中,若有任一網頁被點選,相關Application物件會啟動。ASP解譯器在虛擬目錄下尋找global.asa的檔案(副檔名ASA代表ActiveServerApplication)。執行global.asa中的Application_OnStart()函數。在Application_OnStart()函數中,我們可將變數Application("Counter")的值預設為零,之後若有計數網頁,將此變數值加1。10/45範例:訪客計數器(3)缺點用戶端一再點選瀏覽器的「檢視/重新整理」或是F5按鈕,計數器就會一直累加。解決方法:用Session物件。伺服器重開機時,Application物件會被清除。解決方法:將計數資料寫入檔案。11/45global.asa程式碼重點說明Application_OnStart():將變數Application(“Counter”)的值預設為零。'Application物件啟動時該做的事SubApplication_OnStart()Application("Counter")=0EndSub12/45範例16-1:計數網頁的完整範例主題:使用Application物件的計數網頁的完整範例Webpage:remotehost,localhost程式碼重點說明Application.Lock鎖住Application物件,不讓其他使用者改變Application物件,避免同時Requests造成錯誤動作。if(Application("Counter")==null) Application("Counter")=0;functionPageHitCounter(){ Application.Lock; Application("Counter")++; Application.UnLock; return(Application("Counter"));}13/45若Application("Counter")不存在,則設定其為0鎖住Application物件,不讓其他使用者改變Application物件的任何資訊解除Application物件的鎖定狀態計數變數加1範例16-2:計數網頁的簡化範例主題:計數網頁的精簡範例Webpage:remotehost,localhost程式碼重點說明由於計數器只是一個小程式,發生少許誤差也無所謂,因此前一個完整的範例可改寫成此簡化的範例。14/45<%if(Application("Counter")==null) Application("Counter")=0;%><h3align=center>您是第<fontcolor=red><%=++Application("Counter")%></font>位貴賓!</h3>若Application("Counter")不存在,則設定其為0計數變數加1範例16-3:獨立功能的計數網頁主題:獨立功能的計數網頁Webpage:remotehost,localhost程式碼重點說明想將程式碼反覆用在不同的網頁,且每個網頁都有獨立的計數功能,只要將前一個範例的“Counter”代換為隨網頁而不同的變數。url=Request.ServerVariables("URL");if(Application(url)==null)

Application(url)=0;15/45範例16-4:顯示計數器啟動時間主題:顯示計數器啟動時間Webpage:remotehost,localhost程式碼重點說明如要知道計數器的上次啟動時間,可以使用另外一個變數Application(theStartTime)記錄時間。theStartTimeurl而變,可發揮獨立計數功能。無論使用JScript或VBScript,都可存取相同的Application物件與變數。16/45url=Request.ServerVariables("URL");theStartTime="startTime:"+url;if(Application(theStartTime)==null){

Application(url)=0; now=newDate(); Application(theStartTime)=now.toLocaleString();}若伺服器起動後,本網頁第一次被呼叫時的動作範例16-5主題:印出Application.Contents和Application.StaticObjectsWebpage:remotehost,localhost程式碼重點說明Application.Contents和Application.StaticObjects都是Dictionary變數,可以直接用程式碼將其內容一一印出。<%listdict(Application.Contents,"Application.Contents");%><%listdict(Application.StaticObjects,"Application.StaticObjects");%>17/45範例16-6主題:刪除Application變數Webpage:remotehost,localhost程式碼重點說明可用Application.Contents.Remove()或Application.Contents.Removeall()刪除Application變數。本範例刪除所有Application變數後,再印出Application.Contents和Application.StaticObjects的內容。<%Application.Contents.Removeall()%>18/45Application相關的常見應用Application相關的常見應用網頁記數器。線上投票區。更新正確上線人數(如聊天室)。19/45範例統整與參考資料範例基本的計數網頁:JScript、VBScript

簡化的計數網頁:JScript、VBScript

不同網頁具有獨立的計數功能:JScript、VBScript

計數功能並顯示上次啟用的時間:JScript、VBScript

列出Application.Contents和Application.StaticObjects的內容:JScript、VBScript

清除Application.Contents:JScript、VBScript參考資料ASPApplicationObjectatW3School

20/4516-2:Session物件本節介紹Session物件的基本功能與範例。21/45Session的基本介紹用途Session物件可讓同一個使用者在不同的Web應用程式中共用資訊。不同的Request中,可用Session物件藉著Cookies來保存資訊。Session用來指定每個使用者的相關資訊。條件用戶端的Cookies功能必須是開啟的。22/45Applicationvs.SessionApplication物件和Session物件的比較:Application物件:讓同一個Web應用程式共用資訊。Session物件:讓同一個使用者在不同的Web應用程式中共用資訊。23/45Session物件提供四種性質(Properties)、一種方法(Method)、兩個事件(Events)與兩個集合(Collections)。作法使用者點選某一個網頁時,伺服器就會對此使用者分配一個sessionID。以cookie的方式記錄在用戶端。

sessionID的有效期間為20分鐘。24/45Session的性質列表如下:性質說明CodePage語言識別碼(例:950代表繁體中文、936代表簡體中文、65001代表UTF-8)LCID地區識別碼(例:1028代表台灣地區、3076代表香港地區、2052代表大陸地區)SessionID用戶端的SessionIDTimeoutSession物件的有效時間(以分鐘為單位),預設為20分鐘25/45Session的方法列表如下:方法說明Abandon刪除Session物件所含的所有資訊Contents.Remove(itemorindex)刪除Contents集合中的某一個項目Contents.RemoveAll刪除Contents集合中的所有項目26/45Session的事件與集合事件:集合:事件說明OnStart啟動一個Session物件時所觸發的函式,此函式必須放在global.asa檔案OnEnd結束一個Session物件時所觸發的函式,此函式必須放在global.asa檔案集合說明Contents所有加在Session物件的變數集合StaticObjects所有在使用者層級(SessionScope)所宣告的物件集合27/45範例16-7主題:顯示Session.SessionID及Session.TimeoutWebpage:remotehost,localhost程式碼重點說明Session.CodePage=950代表用戶端的預設語言是繁體中文(大五碼)。Session.LCID=1028代表用戶端所在的區域是台灣地區。<%=Session.SessionID%><%=Session.Timeout%>28/45範例16-8主題:改變Session.LCID來改變日期格式Webpage:remotehost,localhost程式碼重點說明Session.LCID用來指定區域代碼,根據不同的區域代碼,就可產生不同的日期字串。必須將Session.LCID設定回原預設值,否則與地區相關的顯示(如日期等)會發生錯誤。currentLcid=Session.LCID;//記錄目前的LCIDSession.LCID=1028;29/45Session_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()-->ASPscripts-->Session_OnEnd()-->Application_OnEnd()30/45範例:加強版訪客計數器(1)概念使用Session及Application物件。步驟檢查Session("PreviouslyOnLine")值,若是false,則將其值改true,並將Application("Counter")加一。Application(“Counter”)的值即代表此網頁被點選的次數。不因使用者短期(20分鐘)內點選「重新整理」而增加。31/45範例:加強版訪客計數器(2)優點用戶端點選「重新整理」計數器值不會一再累加。缺點:伺服器重開機時,Application物件會被清除,所有的計數資料將消失。解決方法:將計數資料寫入檔案。32/45範例16-9主題:防止計數資料的竄改-方法一Webpage:remotehost,localhost程式碼重點說明本範例使用Session(“PreviouslyOnLine”)的值,若是false,則將值改為true,並將Application("Counter")值加一。if(Session("PreviouslyOnLine")!=true){

Application(“Counter”)++;

Session("PreviouslyOnLine")=true;}33/45範例16-10主題:防止計數資料的竄改-方法二Webpage:remotehost,localhost說明加上「獨立計數」、「計數器啟用時間」等功能,得到更完整的範例。34/45範例16-11主題:記錄每日來訪人數(一天寫檔一次)Webpage:remotehost,localhost程式碼重點說明將計數資料分為「頁次」和「人次」:頁次:網頁被點選的次數。人次:網頁被不同的訪客點選的次數。不會由於伺服器當機,造成所有計數資料流失。寫檔的動作不是很頻繁,伺服器效能較不會降低。if(today.getDate()!=Application("counterDate")){//若不在同一天,則將資料寫入檔案

fid=fso.OpenTextFile(Server.MapPath(counterFile),8,true);//8代表附加資料於檔案,true代表若無檔案則新增35/45Session物件其他相關應用購物網站的購物車的應用利用Session變數來記錄使用者所購買的物品、數量、價格等。認證一次就能悠遊各個網頁使用Session變數記錄認證是否成功,之後在不同的網頁檢查此變數即可,不需重複認證。強迫一定要從網站的首頁進入使用者從網站的首頁進入時,必須設定某一個特定的Session變數。系統會檢查此Session是否存在,若非,則轉址到網站的首頁。36/4516-3:應用範例本節將使用「密碼認證」為範例,說明如何整合client-sidescript及server-sidescript,以達到方便的密碼認證功能。37/45範例介紹特色不需用到IIS或伺服器作業系統本身的認證功能,也不需管理者(Administrator)權限即可使用。使用方便,只需在被密碼保護的網頁導入(Include)一個檔案即可。用session變數,每次認證後有效時間為20分鐘。名詞解釋目標網頁:被密碼保護的網頁。來源網頁:包含「目標網頁」連結的網頁。38/45範例16-12(1)主題:由Session變數保存密碼認證功能說明使用者輸入正確的帳號密碼,則設定Session("ok")為true,同時在原視窗開啟目標網頁,並關閉認證視窗。若帳號密碼不正確,則在認證視窗顯示原來的認證畫面。39/45範例16-12(2)使用步驟使用者點選「秘密網頁」,就會開啟密碼認證視窗(見右上圖)。正確的帳號和密碼填在文字欄位,點選「送出」,認證視窗會被關掉,並在原視窗顯示「秘密網頁」(見右下圖)。40/45範例16-12(3)範例各檔案說明與連結source.asp

執行結果

檢視原始碼

此網頁包含目標網頁(target.asp)的連結。target.asp

執行結果

檢視原始碼

目標網頁(被密碼保護之網頁),第一列程式碼即導入auth.inc,以達到被密碼保護功能。auth.inc

本頁任務為檢驗認證資訊是否存在:若存在,則不做任何事。若不存在,則跳出認證視窗(auth.asp),請求輸入密碼,並在原視窗載入來源網頁(source.asp)。需要密碼保護之網頁,導入此檔案,即可被保護。41/45範例16-12(4)auth.asp

執行結果

檢視原始碼

此頁之目的為進行密碼認證:若通過,則於原視窗開啟目標網頁(tar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论