web-dev-qa-db-ja.com

ASP.NET MVCでSession_End()が呼び出されるのはいつですか?

ASP.NET MVC 2プロジェクトで_Web.Config_ファイルを次のように構成しました。

_<sessionState mode="InProc" timeout="1"/>
_

そして、_Global.asax.cs_に以下を追加しました:

_protected void Session_End(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_End");
}

protected void Session_Start(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_Start");
}
_

Session_Start()は、新しいユーザーがWebサイトにアクセスしたときに呼び出されます。アイドル時間の1分後にSession_End()が呼び出されることを期待していましたが、そうではありません。私は何かが足りないのですか?

18
Alex B

我慢して。イベントを呼び出す必要がありますが、必ずしもタイムアウトの直後である必要はありません。

ブラウザから試すことができます:セッションを開始し、1分以上待って、なんとかしてポストバックを実行します

これは、タイムアウトが機能することを確認するのに役立つはずであり、そのときにSessionEndが発生することも確認できると思います。それ以外の場合は、待ってから他のセッションを開始してください。システムはいつかそれを呼び出すようになります。

9
Henk Holterman

これを覚えて:

セッションに何も保存しない場合、session_endは起動しません。最初のリクエストでセッションにデータを保存していて、同じリクエストでabandonを呼び出すと、session_endも起動されません。

お役に立てれば!

T

ところで: ASP.NET Session_Endイベントが発生していません

10
Tamás Varga

テストのヒント:Session.Abandonを使用して、実際のweb.config値をいじる必要がないようにします。同じリクエスト中にセッション値を設定してSession.Abandonを呼び出さないでください。そうしないと、保存されません。

2
Simon_Weaver