同じセッションIDを持つ多数のsession_start
-
19-09-2019 - |
質問
開発ボックス(Vista/IIS7の.NET 2.0)でASP.NET Webサイトを実行しています。 global.asax.csのsession_startメソッドは、すべての呼び出しをファイル(log4net)にログに記録します。 session_endメソッドは、すべての呼び出しもログに記録します。
InProcセッションの状態を使用しており、セッションタイムアウトを5分間に設定します(20分間待たないように)。
私はウェブサイトにヒットし、5分間のユニットを待ってください。Session_Endロギングが表示されます。それから私はウェブサイトをf5にします。ブラウザにはまだセッションCookieがあり、サーバーに送信されます。 session_startが呼び出され、同じセッションIDを使用して新しいセッションが作成されます(ところで:データベースにデータを保存するために使用されるため、これを同じセッションIDにする必要があります)。
結果:以前に終了したセッションでF5をヒットするたびに、session_startメソッドが呼び出され、リクエストが実行され、session_endメソッドがすぐに呼び出されます。
別のブラウザを開くと、Session_startメソッドは一度だけ呼び出されます。その後、5分後にsession_endの各f5がsession_start/request/session_endシーケンスを実行します。
web.config関連セクション:
<system.web>
<compilation debug="true" />
<sessionState timeout="2" regenerateExpiredSessionId="false" />
</system.web>
解決
regenerateExpiredSessionId
設定はに関連しています Cookieless URLのみ, 、再利用されるセッションクッキーの動作には影響しません。
あなたが経験している問題は、それが使用されているかどうかに基づいたASP.NET 2.0/3.5のハンドルセッションのためです。通常の状況では、セッションが初めて使用されるまでセッションを維持しようとはしないため、セッションCookieを発行しません(存在しない場合)。初めてのセッション は 使用すると、セッションがサーバーで作成され、セッションCookieが発行されます。
以前のセッションが再起動されているが使用されていないとき、ASP.NETは少し混乱します。不要に応じて、未使用(再起動)セッションをすぐに放棄しようとします。ただし、既存のセッションCookieを削除するわけではないため、後続のすべての要求がシーケンスを繰り返し、Cookieが削除されるかセッションが使用されるまでセッションを再起動してから終了します。
.NET 4.0では、この動作が変化し、この場合はイベントが発砲しなくなりました。