Sub Application_OnStart ‘當第一個用戶瀏覽ASP網頁時,將激活Application_OnStart事件,而以后其他用戶瀏覽時,就不發生這一事件了 ‘也就是程序將執行放在這里的代碼 ‘因此可在這里讀出保存在文本文件中Application(CountWeb)的值。 End Sub </SCRIPT> 下面通過一個實例來說明如何使用事件,該程序的作用是統計站點所有頁面的總點擊數。 文件wuf18.asp的代碼(站點內其他頁面文件與這個文件類似): <% @ LANGUAGE = VBScript %> <% Option Explicit ‘站內所有頁面文件都應包括這句<!--#include file="wuf19.asp"-->%> <!--#include file="wuf19.asp"--> <HTML><BODY> 在服務器關閉重啟之前站點所有頁面總點擊數: <%= Application("CountAll") %> </BODY></HTML> 文件wuf19.asp的代碼: <% ' wuf19.asp Application.Lock Application("CountAll") = Application("CountAll") + 1 Application.UnLock %> 文件wuf18.asp與wuf19.asp放在同一目錄下。文件global.asa的代碼: 注意:事件處理程序必須以名為“global.asa”的文本文件存盤,而且必須放在虛擬路徑的根目錄下(一般就是與index.htm或default.htm文件放在同一目錄下,例如:以我的機器為例,就絕對路徑而言,global.asa放在c:/InetPub/home下,而wuf18.asp和wuf19.asp放在c:/InetPub/home/asp下),同一虛擬路徑只允許有一個global.asa文件存在。 <SCRIPT LANGUAGE=VBScript RUNAT=Server> 'global.asa - wuf18.asp 在下載包中的文件名為18global.asa,使用時要改名。 Sub Application_OnStart ‘當第一個用戶瀏覽網頁時,置計數器初值為0, ‘而以后其他用戶瀏覽時,不再執行以下代碼 Application.Lock Application("CountAll") = 0 Application.UnLock End Sub </SCRIPT> 瀏覽wuf18.asp查看運行結果。看來,僅僅學會使用Application對象并不難。
二、認識session對象。有了前面的Application對象做鋪墊,Session對象就容易多了。它與Application對象類似,只不過是僅僅用來記錄單個用戶的相關信息,它面向單個用戶,因此我們可以使用Session對象存儲某單個用戶的信息。 與Application對象一樣,Session對象也有兩個事件:Session_OnStart事件和Session_OnEnd事件。使用語法與Application對象類似。 值得一提的是,使用Session對象前,必須確認瀏覽器的Cookie功能已啟用(默認設置就可以了)。 下面舉一個實例,文件global.asa的要求同上,因此上例中的global.asa將被本例中的global.asa覆蓋。 <SCRIPT LANGUAGE=VBScript RUNAT=Server> ' global.asa - wuf20.asp 在下載包中文件名為20global.asa Sub Session_OnStart Session("In") = Now ‘函數Now取得當前時間 End Sub
if Not IsEmpty(Application("Out")) then Response.Write "您上次進入本站的時間:" & Application("In") & "<Br>" Response.Write "您上次離開本站的時間:" & Application("Out") & "<Br>" Response.Write "瀏覽時間(分鐘):" &_ Datediff("n",Application("In"),Application("Out")) & "<Br><Br>" End If
if IsEmpty(Session("Out")) then Response.Write "刷新前和刷新后Session(""Out"")的值都為空" & "<Br>" End If %> </BODY> </HTML> 當用戶第一次瀏覽網頁時,發生Session_OnStart事件,程序記錄用戶本次進入網頁的時間,而此時不會發生Session_OnEnd事件,故Application("Out")值為空,程序不會顯示瀏覽時間。 我們知道,Application對象的生存期為第一個用戶瀏覽網頁直至服務器關閉。而Session對象的生存期為用戶第一次瀏覽網頁(會話開始)直至會話結束。那什么時候會話結束呢?具體到本例中,Session.Timeout = 1設置會話超時為1分鐘,即如果長達1分鐘沒有向Web服務器提供請求,則會話超時,導致會話結束,發生Session_OnEnd事件,程序執行Session_OnEnd內的代碼。在這里我們將進入和離開時間分別放入Application("In")和Application("Out"),因為會話結束后,Session對象將不復存在,這點我們在代碼的最后做了驗證。 從這個例程,可以看出: 1. Application對象和Session對象的生存期不同。 2. Session對象是針對單個用戶的,它的值存放在客戶端,其他用戶的瀏覽對該單用戶的Session對象沒有任何影響。單個用戶只能讀寫自己Session對象的值(如:Session("In"))。 3. 注意在Response.Write中顯示雙引號的表示方法:(""Out"")。 4. 特別提醒:該程序沒有實用性,僅供調試用(僅適用于只有一個用戶瀏覽的情況),請思考這是為什么?答案見本文末。 提示:請注意Application對象的特性。
三、一個經典的實例:如何在網頁上顯示在線人數 在下面的例子中,用Application("Online")來存放在線人數,用Application("CountAll")存放總訪問人數。 原理:當一個新用戶瀏覽網頁時,發生Session_OnStart事件,在線人數加1,訪問用戶數也加1。當某用戶離開時,會話超時后會發生Session_OnEnd事件,在線人數減1。 Global.asa代碼如下: <SCRIPT LANGUAGE=VBScript RUNAT=Server> ' Global.asa - wuf21.asp Sub Application_OnStart Application.Lock '在這里讀出Application("CountAll")的初始值 Application.UnLock End Sub
Sub Session_OnStart Application.Lock Application("Online") = Application("Online") + 1 Application("CountAll") = Application("CountAll") + 1 Application.UnLock End Sub
Sub Session_OnEnd Application.Lock Application("Online") = Application("Online") - 1 Application.UnLock End Sub
Sub Application_OnEnd Application.Lock '應該在這里將Application("CountAll")保存到文件中 Application.UnLock End Sub </SCRIPT> Wuf21.asp代碼如下: <%@ Language=VBScript %> <HTML> <BODY> <%Session.Timeout = 5%> <P>在線人數: <%= Application("Online")%></P> <P>訪問總人數: <%= Application("CountAll")%></P> </BODY> </HTML> 請注意將本例程與wuf17.asp對比,后者是計算點擊數,而前者是計算訪問人數。