セッションイベントの処理


Global.asaxには、Session StartイベントとSession Endイベントの2つの処理が関連付けられています.
 
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ステータスプロバイダはトリガーしません.
 
 
 

セッション失効制御


デフォルトでは、ユーザーが20分後にもミナを要求しない場合、ASP.NET Frameworkはアプリケーションを離れたと考えています.
場合によっては、デフォルトの有効期限値を変更する場合があります.
 
セッションの有効期限を増やすデメリットは、アプリケーションがより多くのメモリを消費することです.セッションの有効期限が長いほど、サーバのメモリが消費される可能性があります.
 
Webプロファイルでセッションの有効期限を設定したり、プログラムでセッションの有効期限を設定したりすることができます.
Web.Config中

   
       
   


 
プログラムでは、セッションの有効期限を20分から60分に設定します.
Session.Timeout=60