2009-05-18 22 views
1

セッション開始時に、Requestオブジェクトにアクセスできます。 Session Endについては、依然としてRequestオブジェクトにアクセスできますか?たとえば、現在アプリケーションに接続されているブラウザの数をカウントしたいとします。asp.netセッション状態

編集1:セッション終了がリクエストオブジェクトにアクセスできない場合、どの情報にアクセスできますか?セッションIDなど?

編集2:セッション終了を使用して切断を追跡できない場合、ASP.Netの切断をどのように追跡しますか?

おかげ

答えて

1

InProcを使用している場合、Session_Endが発生します。

非アクティブのN分後

のSession_Endは 1を解雇されます)(N =タイムアウト値)、または 2)誰かがSession.Abandonを(呼び出す場合)

1は、ブラウザを閉じた場合のSession_Endは発生しません。 。

Session_Endでは、セッション状態を設定する必要があります。

元のRequest.Browserデータが必要な場合は、セッション状態で保存する必要があります。

Session_Endの間、セッション状態にアクセスできます。

+0

Session_Endでセッションにアクセスする方法の例を提供できますか?私はそれに到達することはできません... –

+0

void Session_End(オブジェクト送信者、EventArgs e) { \t文字列str =セッション[ブラウザ]; } –

1

ありませんが、Requestオブジェクトは、セッション終了では使用できません。

セッション終了は、コードからSession.Abandon()を呼び出すときにのみ発生します。セッションが自然なタイムアウトやwhat-have-youのために期限切れになった場合には発生しません。したがって、切断を追跡するために使用する信頼できる方法ではありません。 セッションが出て断念したり回されたときに

+0

こんにちはRex、返信いただきありがとうございます。私のアプリケーション(Firefox 5セッション、IE 10セッションなど)で現在接続されているブラウザセッションをどのように追跡していますか? –

+0

MSDNのドキュメントから "Session_OnEndサブルーチンは、Abandonメソッドが呼び出されたとき、またはセッションが期限切れになったときに実行されます。" http://msdn.microsoft.com/en-us/library/ms178583(VS.80)。aspx –

+0

@ GregBそれは言うが、Session_Endが期待どおりに動作していない理由を理解しようとすると、Session_Endイベントにブレークポイントを持つプロセスにデバッガが接続されてしまい、明示的にSession.Abandon()を呼び出さない限り、私はセッションがタイムアウトしたときにセッション終了を見たことがありません。 –

0

the documentation

からいるSession_OnEndイベントが発生します。サーバー組み込みオブジェクトの のうち、 アプリケーションオブジェクト、サーバーオブジェクト、および セッションオブジェクトオブジェクトのみが使用できます。

備考

あなたがいるSession_OnEndスクリプトでServer.MapPathの メソッドを呼び出すことはできません。 デフォルトでは、Session_OnEndは、 アプリケーションで定義されているように、 匿名ユーザーとして実行されます。 が匿名ユーザーでない場合、または匿名ユーザーのログオン が失敗した場合、 OnEnd関数は呼び出されず、 イベントがログに記録されます。

+0

あなたは? –

+1

@Rex M:セッションインプロセスセッションを使用する場合はセッション終了のみ、セッションストアとしては状態サーバーまたはSQL Serverを使用する場合は起動しません。 – Rytmis