3

Session_Start および Session_End イベントのハンドラーがあります。アプリケーションを初めて起動すると、すべて正常に動作します。セッションを離れて標準のタイムアウトが発生した場合、Session_End がスローされるのを監視します。その振る舞いを期待しています。

タイムアウト後に戻ってきて、ページを更新するとしましょう。Session_Start メソッドが実行されますが、すぐに Session_End メソッドが実行されます。Session_Start と Session_End の間にさらに 15 分間のアイドル状態が続くと予想しています。

問題は何でしょうか?

編集: はい、同じセッション ID。

編集 2: Cookie は、セッションの終了時に期限切れになるはずのように見えます。Session_Start/Session_End のこのループが発生し続ける理由がわかりません。また、Session_End から Session.Abandon() を呼び出してみましたが、うまくいきませんでした。これは、ASP.NET 開発サーバーからも実行されています。実際の IIS サーバーではまだ試していません。

4

5 に答える 5

4

答えるのは少し遅いですが、同じ問題を抱えている他のユーザーにとっては役立つかもしれません。私はあなたが見たのと同じ振る舞いを経験しました:Session_Start()そしてSession_End()最初のタイムアウト後にすべてのリクエストに対して呼び出され、SessionIDは常に同じ:

  1. ASP.NET 4.0で同じコードを実行しましたが、問題は解決しました。

  2. Session["dummy"] = "dummy"ASP.NET 2.0 / 3.5の回避策として、セッションコレクション( )に何かを入れるだけで、Session_Start()正常Session_End()に動作します。

于 2010-03-04T13:45:32.707 に答える
1

同じ問題を抱えている人のために。アレックス B の答えに救われました。

これは 4.0 では発生しなくなりましたが、Session_Start ハンドラー内の Session に何かを配置すると、Session_Start -> Session_End の円が切断され、Cookie を削除する必要さえありません。

于 2012-05-18T18:24:56.600 に答える
0

これはこの質問の複製です。

これは、使用中かどうかに基づいて ASP.NET 2.0/3.5 がセッションを処理する方法によるものです。通常の状況では、最初に使用されるまでセッションを保持しようとしないため、セッション cookie は発行されません (存在しない場合)。初めてセッション使用されると、サーバー上でセッションが作成され、セッション Cookie が発行されます。

以前のセッションが再起動されたが使用されていない場合、ASP.NET は少し混乱します。未使用の (再起動された) セッションは不要であるため、すぐに破棄しようとします。これにより、早い段階で Session_End が発生します。ただし、既存のセッション Cookie は削除されないため、後続のすべての要求は、Cookie が削除されるかセッションが使用されるまで、セッションを再開して終了するというシーケンスを繰り返します。

.Net 4.0 ではこの動作が変更され、この場合イベントは発生しなくなりました。

于 2011-08-28T01:08:47.143 に答える