2009-03-20 10 views
5

asp.netメンバーシップを使用していて、コントローラー/アクションで[Authorize]タグを持っているときに、コーヒーを飲んだり戻ったり、あなたはサイトからログアウトされています。 Ajax呼び出しを呼び出すボタンまたはリンクをクリックすると、返されたhtmlは要求されたものではなく、ログイン画面がページのどこかでレンダリングされます($( "プレースホルダ")を使用している場合)。)。ログイン画面のajax結果 - Asp.net Mvc

jQueryでこれを検出する方法はありますか?それは正当なhtmlであるので、あなたはエラーを得ることはありませんが、それはあなたが過ちを犯したがっているものではありません。

答えて

6

クライアント側のセッションタイムアウトの検出が可能なことは1つあります。実際のセッションの有効期限が切れる直前に期限切れになるタイマーを設定します。タイマーにセッションが期限切れになることを知らせるダイアログをポップアップして、ユーザにそれを更新させる(セッションタイマーをリフレッシュするAJAXリクエストを送り返す)ことができるようにします。実際のセッションの残り時間がなくなる前に期限切れになる別のタイマーをダイアログに表示させてください。このタイマーが起動した場合は、ページのhrefをログアウトURLにリセットしてユーザーをログアウトします。明らかに、タイマーは、ページアバスのリクエストなどのユーザーのアクティビティによってリセットする必要があります。

6

tvanfossonのクライアント側セッションタイムアウトアプローチは、実際には非常にうまくいきます。昼食後に戻り、自動的にログインページにリダイレクトされたことがわかりました。次のように

別のアプローチは次のようになります。

あなたは(例えば)/アカウント/詳細にAjaxリクエストを送信するが、あなたのログインCookieの有効期限が切れているので、あなたがそれを見ることが許されていません。コントローラは/ Security/Loginを返します。

あなたのコントローラは、ログインビューの代わりに、要求されたページを返す場合は、あなたは401 Not authorized代わりに200 のOKに応答コードを設定することを検討していますか?

あなたはAjaxレスポンスのステータスコードを検査するためにAjaxコールバックを変更する必要があります。もしそれが401 Not authorizedなら、それに応じて応答することができます - ログインページにリダイレクトする、ポップアップログインボックスを表示する、または「申し訳ありません、あなたは再度ログインする必要があります」というエラーメッセージだけが表示されます

関連する問題