Global.asaファイルとは
ApplicationオブジェクトとSessionオブジェクトの使い方を説明しましたが、これらのオブジェクトには、表に示すようなイベントがサポートされています。これらのイベントは、Global.asaファイルと呼ばれる特別なファイルに組み込む必要があります。このGlobal.asaファイルは、Webサイトのルートディレクトリに格納します。IISは、新しいユーザーがWebサイトを訪問したとき、Global.asaを探してGlobal.asaに登録されている各種イベントに制御を渡します。
表 Application/Sessionオブジェクトでサポートされているイベント
|
オブジェクト |
イベント |
意 味 |
|
Application |
Application_OnStart |
このイベントは、Webサイトの最初のSessionが作成されたときにときに発生します。 |
|
Application_OnEnd |
このイベントは、Webサーバーがシャットダウンされるときに発生します。 |
|
|
Session |
Session_OnStart |
このイベントは、Webサイトを新しいユーザーが訪問したときに発生します。 |
|
Session_OnEnd |
このイベントは、SessionがタイムアウトまたはSession.Abandonメソッドを発行したときに発生します。Sessionのタイムアウト時間は、Session.Timeoutで再設定できます。 |
Global.asaファイルに各種イベントを登録するには、HTMLファイルにスクリプトを挿入するのと同じ手順でHTMLの<script>・・・</script>タグ内に挿入します。<script>タグには、language=”vbscript”とrunat=”server”を指定します。
<script language=”vbscript” runat=”server”>
Sub Application_OnStart
・・・
End
Sub Application_OnEnd
・・・
End
</script>
リスト Global.asaファイルのサンプル
|
1: '--------------------------------------- 2: ' global.asa 3: '--------------------------------------- 4: <script language=”vbscript” runat=”server”> 5: sub Application_OnStart 6: on error resume next 7: application("Visitors") = 0 8: application("ActiveUsers") = 0 9: 10: application("AppName") = "システム名" 11: application("AppVersion") = "V1.00" 12: 13: application("ConnectionString") = "Provider=Microsoft.Jet.OLEDB.4.0;" _ 14: & "Data Source=" & server.MapPath("accweb/accweb.mdb") 15: end sub 16: 17: sub Application_OnEnd 18: on error resume next 19: end sub 20: 21: sub Session_OnStart 22: on error resume next 23: application.lock 24: application("Visitors") = application("Visitors") + 1 25: application("ActiveUsers") = application("ActiveUsers") + 1 26: application.unlock 27: end sub 28: 29: sub Session_OnEnd 30: on error resume next 31: application.lock 32: application("ActiveUsers") = application("ActiveUsers") - 1 33: application.unlock 34: end sub 35: </script> |
リストのGlobal.asaファイルには、4種類のイベントが登録されています。以下に各イベントの処理について説明します。
● Application_OnStartイベントの処理
このイベントは、Webサイトの最初のSessionが作成されたときにときに発生します。このイベントでは、各種Application変数を初期化しています。Application(“Visitors”)には、Webサイトの訪問者数の累計が格納されます。Application(“ActiveUsers”)には、現在Webサイトを訪問しているユーザー数が格納されます。Application(“AppName”)とApplication(“AppVersion”)には、システム名とバージョン番号が格納されます。
Response.Write(“訪問者数累計:” & Application(“Visitors”))
Response.Write(“Active Users:” & Application(“ActiveUsers”))
Response.Write(“システム名:” & Application(“AppName”))
Response.Write(“バージョン番号:” & Application(“AppVersion”))
Application(“ConnectionString”)には、”ado.connection”オブジェクトでAccess のデータベースを接続するための引数を保存しています。
set cnn = server.CreateObject("adodb.connection")
cnn.open Application(“ConnectionString”)
Note
|
Application変数は、Webサーバーがシャットダウンされると解放されます: Application変数は、Webサーバーがシャットダウンされると解放されます。このため、Application変数に訪問者数の累計を格納する場合、ファイルまたはデータベースに格納する必要があります。たとえば、Access 2000のテーブル(tblLog)のLogVisitorsのフィールドをApplication(“Visitors”)で更新するには以下のように記述します。 dim cnn, strSQL const adExecuteNoRecords = &H00000080 set cnn = server.CreateObject("adodb.connection") cnn.open Application("ConnectionString") strSQL = "Update tblLog Set LogVisitors=" & CStr(Application("Visitors")) _ & " Where LogName='Visitors';" cnn.execute strSQL,,adExecuteNoRecords cnn.close set cnn = nothing |
● Application_OnEndイベントの処理
このイベントは、Webサーバーがシャットダウンされるときに発生します。このイベントでは、Application変数を明示的に解放するなどの処理を行います。
● Session_OnStartイベントの処理
このイベントは、Webサイトを新しいユーザーが訪問したときに発生します。このイベントでは、Application(“Visitors”)とApplication(“ActiveUsers”)を+1して累計を更新しています。Application変数を更新するこきは、他のユーザーと競合しないように、Application.lock/Application.unlockメソッドを使用して排他制御する必要がります。
● Session_OnEndイベントの処理
このイベントは、SessionがタイムアウトまたはSession.Abandonメソッドを発行したときに発生します。このイベントでは、Application(“AcriveUsers”)を-1して累計を更新しています。Application変数を更新するこきは、他のユーザーと競合しないように、Application.lock/Application.unlockメソッドを使用して排他制御する必要がります。
Tip
|
Global.asaファイルをアプリケーションごとに用意するには: Global.asaファイルは、通常Webサイトのルート(例:“C:\Inetpub\wwwroot”)に格納します。Webサイトに複数のアプリケーションを構築するときは、アプリケーションの仮想ディレクトリを作成してGlobal.asaファイルは、仮想ディレクトリのルートに格納します。 |