セッション状態イベント
更新 : 2007 年 11 月
ASP.NET には、新しいセッションが開始されると発生する Session_OnStart イベント、およびセッションが破棄される、または有効期限が切れると発生する Session_OnEnd イベントという、ユーザー セッションの管理に役立つ 2 つのイベントが用意されています。
メモ : |
---|
ASP.NET アプリケーションの Global.asax ファイルまたは Web.config ファイルが変更されると、アプリケーションが再起動されます。現在のセッション状態モードが InProc の場合、アプリケーション状態またはセッション状態に格納されている値は失われます。ウイルス対策ソフトウェアには、アプリケーションの Global.asax ファイルまたは Web.config ファイルの最終更新日時を更新できるものもあります。セッション状態モードの設定の詳細については、「セッション状態モード」を参照してください。 |
Session_OnStart イベント
Session_OnStart というサブルーチンを Global.asax ファイルに追加することによって、Session_OnStart イベントを処理できます。要求によって新しいセッションが起動される場合、Session_OnStart サブルーチンは、その要求の開始時に実行されます。SessionID 値を含まない要求が行われた場合、または要求に含まれる SessionID プロパティが有効期限切れのセッションを参照している場合、新しいセッションが開始されます。
Session_OnStart イベントを使用すると、セッション変数を初期化できるだけでなく、セッション関連情報も追跡できます。
Session_OnEnd イベント
Session_OnEnd というサブルーチンを Global.asax ファイルに追加することによって、Session_OnEnd イベントを処理できます。Session_OnEnd サブルーチンは、Abandon メソッドが呼び出されたとき、またはセッションの有効期限が切れたときに実行されます。セッションに対する要求が行われずに Timeout プロパティで指定した時間 (分) が経過すると、セッションは期限切れとなります。
Session_OnEnd イベントは、セッション状態 Mode プロパティが InProc に設定されている (既定) 場合にだけサポートされています。セッション状態 Mode が StateServer または SQLServer である場合、Global.asax ファイルの Session_OnEnd イベントは無視されます。セッション状態 Mode が Custom に設定されている場合、Session_OnEnd イベントのサポートは、カスタム セッション状態ストア プロバイダによって決定されます。
Session_OnEnd イベントを使用すると、SessionID 値によってデータ ソース内で追跡されるユーザーに関する情報など、セッション関連情報を削除できます。
セッション イベント例
次のコード例では、Global.asax ファイルに追加できる Session_OnStart サブルーチンと Session_OnEnd サブルーチンのサンプルを示します。この例で定義されるサブルーチンでは、アプリケーションをアクティブに使用しているアプリケーション ユーザーの数を追跡するカウンタが作成されます。このコード例は、セッション状態 Mode プロパティが InProc に設定されている場合にだけ機能します。これはSession_OnEnd イベントがインプロセス セッション状態ストレージについてのみサポートされているためです。
<script language="VB" runat="server">
Public Sub Application_OnStart()
Application("UsersOnline") = 0
End Sub
Public Sub Session_OnStart()
Application.Lock()
Application("UsersOnline") = CInt(Application("UsersOnline")) + 1
Application.UnLock()
End Sub
Public Sub Session_OnEnd()
Application.Lock()
Application("UsersOnline") = CInt(Application("UsersOnline")) - 1
Application.UnLock()
End Sub
</script>
<script language="C#" runat="server">
public void Application_OnStart()
{
Application["UsersOnline"] = 0;
}
public void Session_OnStart()
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
Application.UnLock();
}
public void Session_OnEnd()
{
Application.Lock();
Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
Application.UnLock();
}
</script>