計算線上人數


阿閔 發表



最近有網友在討論版上問到線上人數統計的問題, 而在網路上其實已經有很多範例,大概上都是使用global.asa的方式 行線上人數統計,只是有很多網友把程式碼COPY回去,卻RUN不出來.. 阿閔研究了一下,原來是有些小地方,教學沒有提到,所以在這邊, 我同樣的也是要用這個方式來教大家使用….

最近有網友在討論版上問到線上人數統計的問題, 而在網路上其實已經有很多範例,大概上都是使用global.asa的方式 行線上人數統計,只是有很多網友把程式碼COPY回去,卻RUN不出來.. 阿閔研究了一下,原來是有些小地方,教學沒有提到,所以在這邊, 我同樣的也是要用這個方式來教大家使用,不過在這之前, 先跟大家解釋一下Global.asa的角色...
Global.asa 其實可以算是一個為虛擬目錄提供預設變數或 控制全域變數角色,每當使用者使用目錄下的任何一個檔案, 就會 觸發這個檔案去執行預設的內容,這支程式執行時主要是在SERVER端 執行,可以控制在啟始一個連線時所要預先執行的程式,在線上人數統計 ,即是利用APPLICATION("")這個物件,來記錄Client端共用的變數,透過 啟始一個連線時加一,中斷一個連線時減一來達到統計線上人數的目的!

STEP 1 程式內容

Global.asa (須置於虛擬目錄的根目錄)
------------------------------------------------
<script Language="VBScript" RunAt="Server">
Sub Application_OnStart()
Application("Usercount") = 0
End Sub

Sub Session_OnStart()
Application.Lock
Application("Usercount") = Application("Usercount") + 1
Application.UnLock
End Sub

Sub Session_OnEnd()
Application.Lock
Application("Usercount") = Application("Usercount") - 1
Application.UnLock
End Sub

Sub Application_OnEnd()


End Sub
</script>
------------------------------------------------

針對global.asa的內容講解:
Application_OnStart()第一次被執行時所要執行的函數
Application_OnStart()是當第一次人家瀏覽這個目錄裡面的一個檔案時觸發,此例是產生application("usercount")物件開始計算此目錄上的瀏覽人數

Session_OnStart()每個連線啟始時所要執行的函數
Session_OnStart()是當有人產生連線的時候觸發 (請注意這個session代表使用者的連線, 不是所有的session物件, 此例中的觸發動作是線上人數加上一,每一個使用者連上這個目錄中的檔案就會在application("usercount")加上一, 也就是多了一個瀏覽者)

Session_OnEnd()每個連線中斷後所要執行的函數,當使用者離開就會執行的動作, 此例中是線上人數減一
這個物件是當有人結束連線或連線逾時(TIMEOUT)的時候觸發 (請注意這個session代表使用者的連線, 不是所有的session物件, 此例中的觸發動作 是application("usercount")減掉一, 每當一個使用者結束與此目錄中的檔案的連線就會在application("usercount")減掉一, 也就是少了一個瀏覽者)

Application_OnEnd()
這個物件是指當這個目錄持續有一段時間沒有人連線,超過系統預設的(TIMEOUT)時間後 所要執行的內容, 在此例中是沒有任何動作


您想要統計人數的時候只要在某個ASP檔案中加上這段ASP:
------------------------------------------------
線上人數:<%= Application("Usercount")%>人
------------------------------------------------
就可以取得目前這個虛擬目錄上在瀏覽的人數
由於Application物件是全域性的, 整個server上的檔案讀取到的線上人數數值都是一樣的. (到了這邊您應該了解了, global.asa利用這個目錄中的狀態來計算線上人數, 供其他的檔案使用)



STEP 2 IIS設定
這一個部份是很多人都會忽略的部份!也就是為什麼很多人在網路上
抓了程式回去出來的線上人數都是空白....
在虛擬目錄的內容,要將指令檔來源存取打勾,使用者連線的時候才會
自動去執行Global.asa 而在實際測試的時候,阿閔發現,人數在測試的
過程中,都只會增加,不會減少,所以順便把工作階段逾時的時間也改短了
~果然就可以正常使用了!

圖一

圖二


這一篇教學主要是伺服器端的VBscript應用喔!

最後更新日期: 4/26/2002 9:54:03 PM