セッション管理の問題を示す ASP.NET MVC 4 アプリケーションがあります。
セッションを使用して、ログインしているユーザーを追跡しています。ユーザーがログインしていることを確認し、ログインしていない場合はログイン ページにリダイレクトするカスタム アクション フィルタがあります。
これは通常、正常に機能します。ただし、特定のリクエスト中に新しいセッションが作成されるという問題があります。セッション ID は同じですが、Session.IsNewSession プロパティはそれが新しいセッションであることを示しており、セッションの内容はなくなっています。
発生するアクションは非同期アクションです (.NET 4.5 の async/await 機能を使用)。await キーワードで呼び出されたスレッドでセッションを操作しません。await 操作が完了したら、RedirectToAction を実行して操作の結果を表示します。
セッションを確認すると、リダイレクト先のアクションを実行する直前に、カスタム アクセス属性が設定されているため、新しいセッションが作成されていることがわかります (そのため、認証が失敗し、ログインに戻ります)。ページ)。
アプリケーションの多くのポイントで RedirectToAction を使用しているため、それが問題になることはありません (または少なくとも唯一の問題)。awaitによって呼び出されるコード内でセッションを使用または必要としない場合でも、問題はasync/await呼び出しに関係している可能性がありますか?
ASP.NET スレッドをプールに戻し、セッションを無効に戻すことはありますか? もしそうなら、解決策は何ですか?待機中にセッションを保存して復元できますか? または、たとえば、ユーザーがデータベースにログインしたことを記録するカスタム ロジックを実装する必要がありますか?