この特集のトップページへ
Chapter 8:プレゼンテーション層の構築

8.2.2 アプリケーションとセッション
●ASPとイベント
 ASPは,Webアプリケーションが起動したときや終了したとき,セッションIDが割り振られたときやセッションのタイムアウトが発生したときなどにイベントを発生する。開発者は,これらのイベント処理を記述することで,Webアプリケーションの初期化処理や終了時の後処理を記述できるようになっている。

 ASPが用意しているのは,次の4つのイベントである。

Application_OnStartイベント
 Webアプリケーションが起動したときに発生する。より詳しくいえば,IISが起動したあと,もしくはWebアプリケーションがアンロードされたあと,仮想ディレクトリ内の任意のファイルに対してアクセスがあったときである。Application_OnStartイベントの処理中ではASPが用意しているオブジェクトのうち,ApplicationオブジェクトとServerオブジェクトしか利用できない。たとえば,Responseオブジェクトを使ってユーザーに出力するような処理はできない。
 
Application_OnEndイベント
 Webアプリケーションが終了したときに発生する。より詳しくいえば,IISが終了しようとしているとき,もしくはWebアプリケーションがアンロードされたときに発生する。Application_OnEndイベントの処理中では,ASPが用意しているオブジェクトのうち,ApplicationオブジェクトとServerオブジェクトしか利用できない。
 
Session_OnStartイベント
 セッションが開始されたときに発生する。より詳しくいえば,クライアントが初めて,もしくはタイムアウト後に,仮想ディレクトリ内の任意のファイルに対してアクセスしたときに発生する。
 
Session_OnEndイベント
 セッションが終了したときに発生する。より詳しくいえば,セッションのタイムアウト時間になったとき,もしくはSession.Abandonメソッドを呼び出してSessionオブジェクトを破棄したときに発生する。Session_OnEndイベントの処理中では,ASPが用意しているオブジェクトのうち,Applicationオブジェクト,Serverオブジェクト,Sessionオブジェクトしか利用できない。

 イベント処理は,仮想ディレクトリ単位で実現される。イベント処理の内容は,仮想ディレクトリにマッピングされたディレクトリに配置したGlobal.asaというファイルに記述する。その書式は,List 8-29のとおりである。List 8-29では,すべてのイベント処理の書式を記述してあるが,実際には必要なイベント処理だけを記述すればよい。つまり,必要のないイベント処理に対応するSubプロシージャは,作成する必要はない。


One Point! イベントのうち,Session_OnStartイベントとSession_OnEndイベントはセッションが開始されるときと終了されるときに発生するイベントである。そのため,頻繁にイベントが発生する。よって,この2つのイベントを処理する部分に時間のかかる処理を記述すると,パフォーマンスが極端に劣化するおそれがある。

 なお,List 8-29はVBScriptで記述したときの例であり,実際にはJScriptやPerlScriptなど,ほかの言語で記述することもできる。その場合の書式は,List 8-29とはやや異なる。詳細は,IISのオンラインヘルプを参照してほしい。

 Global.asaファイルに実装するイベント処理によって,どのような処理を実現するのかは,Webアプリケーションに依存する。しかし,多くの場合,Application_OnStartイベントにはWebアプリケーションで使うApplicationオブジェクトの初期化処理を,Session_OnStartイベントにはSessionオブジェクトの初期化処理を,それぞれ実装することになろう。

 たとえば,List 8-28に示したchat.aspでは,Application("MAXMESSAGE")の値を初期化せずに使っている。本来ならば,Application_OnStartイベントを次のように記述し,きちんと初期化しておくべきだろう。

Sub Application_OnStart
  Application("MAXMESSAGE") = 0
End Sub

 ところで,Session_OnStartイベントは,独特の使い方をされることもある。それは,特定ページへのリダイレクトである。

 Webアプリケーションを構築する場合,仮想ディレクトリ内の任意のURLに直接アクセスすることを禁止し,初回接続時には必ず用意したログインページに接続させたい場合がある。たとえば,そのようなログインページがlogin.aspというファイルで提供されているとすると,Session_OnStartイベントを次のように記述すれば,目的の処理を実現できる。

Sub Session_OnStart
  Response.Redirect "login.asp"
End Sub

 このイベント処理をGlobal.asaファイルに記述しておくと,仮想ディレクトリ内のどのファイルにアクセスしようとしても,初めてのアクセスであれば(セッションIDをまだ保持していなければ),必ずlogin.aspファイルがユーザーに表示されることになる。

Prev 27/43 Next