コンテキストの場合、フォーム認証タイムアウト値がweb.configに設定されていて、ASP.NET MVC 1を使用しています。 2ユースケースとして、私の問題を述べる - 認証タイムアウトなしで何が起こるか最初のもの、および認証タイムアウトと何が起こるか第二1:.NET C#:AJAX呼び出し中にフォーム認証の有効期限を処理する方法
ノーマルケースを:
アプリにログインすると、認証タイマーが点滅を開始します。認証期間はまだ有効ですが、ユーザーはAJAX呼び出しをトリガーするページ上の何かを(jQueryを通して)クリックします。サーバーにヒットしてリクエストを処理し、部分的なビューをユーザーに返します(ActionResult
)。 htmlはAjaxの成功メソッドの文字列として渡され、このhtmlをとりページのdivに挿入します。これはすべて予想されます。
は、ケースをタイムアウトしました:
は、ユーザーがアプリにログインすると、認証タイマーが刻々と過ぎて開始します。 x時間後に、認証期間が終了します。有効期限が切れると、ユーザーは(jQueryを使用して)AJAX呼び出しをトリガーするページ上の何かをクリックします。我々はサーバーにヒットしましたが、認証チケットは期限切れです。 .NETはタイムアウト期間を設定する同じweb.config要素に定義されたloginURL
値に自動的にリダイレクトします。私にとって、このページはユーザがログインするためのユーザ名/パスワードを入力するように要求されるログインページです。したがって、Home/Login
コントローラアクションが実行され、最終的にajaxの成功へのhtmlの文字列として完全な(部分的ではない)方法。これは、私がフルページのhtml(<html>
タグを付けて)を取り、それをページのdivに挿入しようとしているため、ページが爆弾になる原因となります。
だから私の問題があります。認証期間が終了し、.NETがログインページにリダイレクトされると、全ページのHTMLをajaxの成功メソッドに戻してしまいます。もちろん、サーバーのヒットがAJAXコールでない場合は、すべて正常に動作します。ログインページに正しくリダイレクトされます。しかし、私はこのケースをどうすれば処理できますか?誰にもアイデアはありますか?
ありがとうございました。
返信いただきありがとうございます。残念ながら、.NETがログインページにリダイレクトするまでに、Request.IsAjaxRequest()はfalseを返します。 .NETが認証がタイムアウトしたことを認識し、 'loginURL'を打つことを決定すると、おそらく新しいリクエストが生成されます。 –
@Mega Mattおそらくあなたがmvc1を使っているからでしょう。 jQueryで作成されたすべてのAJAX呼び出しには、AJAXであることを示すヘッダーが追加されます。チェックするヘッダーはX-Requested-Withで、値はAJAX呼び出しの場合XMLHttpRequestになります。デバッグを試して、Request.Headers ["X-Requested-With"]を探してください。 – Omu
Request.Headersに「X-Requested-With」がありません。 「接続」、「キープアライブ」、「受け入れる」、「受け入れる - 文字セット」、「受け入れエンコーディング」、「受け入れ言語」、「Cookie」、「ホスト」、「参照者」、エージェント"。正直なところ、Request.IsAjaxRequest()がfalseを返していた場合、AJAXリクエストに関連するヘッダーがあるとは思っていませんでした。私はMVC 1を使ってこのことがまだ私に関係していると思いますか? –