セッションイベントの処理
Session Startイベントは、新しいユーザセッションの開始時にトリガーされます.このイベントを使用して、データベースからユーザー情報をロードできます.
たとえば、Session Startイベントを使用してユーザーカートにロードできます.
Session Endイベントは、返信終了時にトリガーされます.セッションは、ユーザがアクティブでないために期限が切れたり、セッションが表示されたりします.Abandon()メソッドで終了します.
Session Endイベントを利用できます
たとえば、ユーザーのカートをデータテーブルに自動的に保存したい場合.
Code:
void Application_Start(object sender,EventArgs e)
{
Application["SessionCount"] =0;
}
void Session_Start(object sender,EventArgs e)
{
Application.Lock();
int count=(int)Application["SessionCount"];
Application["SessionCount"]=count+1;
Application.UnLock();
}
void Session_End(object sender,EventArgs e)
{
Application.Lock();
int count=(int)Application["SessionCount"];
Application["SessionCount"]=count-1;
Application.UnLock();
}
前例:Global.asaxファイルは、アクティブなセッションの数を追跡するために使用されます.いつでも新しいセッションが開始すると、SessionStartイベントがトリガーされ、SessionCount変数が1増加します.
セッションが終了するとSession Endイベントがトリガーされ、SessionCount変数が1減少する.
SessionCount変数はアプリケーション状態に保存され、アプリケーション状態に含まれるアイテムはアプリケーションのすべてのユーザによって共有されます.
注意:アプリケーション・オブジェクトを変更するときにロックされている場合は、同じ時間に複数のユーザーがアプリケーション・ステータスの同じアイテムにアクセスする可能性があるため、アプリケーション・オブジェクトにロックとロック解除を追加する必要があります.
注記:アプリケーションのステータスはASP.NETではあまり使われていません.ほとんどの場合、Cacheオブジェクトはメモリを自動的に管理できるように設計されているため、Application状態ではなくCacheオブジェクトを使用する必要があります.
すべてのセッションストレージプロバイダがセッションEndイベントをトリガーするわけではありません.InProcセッションストレージプロバイダ(デフォルトのセッションプロバイダ)がトリガーしますが、StateServerまたはSQLServerステータスプロバイダはトリガーしません.