0

私の Asp.Net MVC 3 アプリケーションには、コントローラー アクションが呼び出される前にセッションの有効期限が切れているかどうかをチェックするカスタム セッション有効期限ハンドラー属性フィルターがあります。

セッションの有効期限が切れている場合、カスタム フィルターはフォーム認証からユーザーをサインアウトし、ユーザーをログイン ページにリダイレクトします。また、許可されたコンテンツにアクセスするときにユーザーの許可が失敗した場合、同じアクション フローが発生することも認識しています。

このシナリオでは、セッションまたは認証のタイムアウトが同じ効果 (ユーザーがフォーム認証からサインアウトし、ログイン ページにリダイレクトされる) になる場合、Timeout(Session) が Timeout(認証)?

4

1 に答える 1

0

あなたの質問を正しく理解できれば、あなたの認証属性がここでのゲートキーパーになる可能性があります。問題は、アプリケーション プールの再起動の場合など、フォーム認証トークンの前にセッションがタイムアウトした場合です。あなたがこれを処理しているように聞こえます(そうでない場合は、SOのコードを作成しています)。反対の場合、非認証ページ/アクションのセッションで何も依存していないことを確認する必要があります。そうしないと、ユーザーが匿名でページにアクセスできるときにセッション値を期待するリスクがあります。それを超えて、問題を引き起こす別のシナリオが考えられません。

認証属性は常にこのケースをキャッチし、セッションが再開されるログイン ページにリダイレクトする必要があります。

ただし、セッションに注意してください。そのユーザーに対する複数のリクエスト (つまり、Ajax リクエスト) と同時にセッション オブジェクトにアクセスしても、セッションはデフォルトの動作でそのユーザーに対してロックされているため、一度に 1 つずつしか処理されません。

セッションオブジェクトにアクセスする他のリクエストが完了するまで、他のリクエストは文字通りハングします。これは、メインのリクエストのみがセッションにアクセスし、そのユーザーの他の重複するリクエスト (存在する場合) がアクセスしない場合は問題になりません。

于 2012-10-31T06:27:16.163 に答える