1

ユーザーがログインする必要がある Web ページがいくつかあります。これらのページでは、jQuery を使用して Ajax 呼び出しを行うことがよくあります。Ajax 呼び出しが行われると、サーバーは (セッション Cookie を介して) ユーザーがログインしているかどうかを識別できます。これはすべて、かなり標準的で基本的なことです。

私の問題は、ページがまだブラウザに表示されている場合でも、セッションが無効になることがあることです。たとえば、ユーザーがサイトにログインし、何らかの作業を行った後、数時間離れたとします。戻ったとき、ユーザーのブラウザーはまだページ上にあり、ユーザーは Ajax 呼び出しを行う何かを試みます。ユーザーのセッションがタイムアウトしたため、この Ajax 呼び出しは失敗します。もう 1 つの例は、複数のデバイスの場合です。ユーザーは自分のデスクでブラウズし、ブラウザを起動したままにし、何らかの理由で別のマシンまたはデバイスを使用してサイトにログインします。この 2 番目のデバイスは、最初のセッションを無効にします (この特定の会社では、ユーザー ID ごとに 1 つのログインのみが許可されます)。最初のボックスに戻ると、ユーザーは失敗する Ajax 操作を試みます。

私が心配しているのはセキュリティではないことに注意してください。システムはこの点で適切に機能し、Ajax 呼び出しを行うときにユーザーが有効なセッションを持っていることを確認します。問題は、ユーザーのセッションがタイムアウトしたときに適切に処理されないことです。ユーザーがこれらのケースの 1 つで多くの作業 (たとえば、長いフォームに入力) を行った後、Ajax を使用してフォームを保存しようとすると、保存は失敗します。ユーザーができる唯一のことは、別のタブでシステムにログインし、失敗したタブに戻って再試行することです。あまりエレガントではありません。

これはよくある問題ですが、解決策がわかりません。理想的には、これが必要です。ユーザーが有効なセッションを持っていないために Ajax 呼び出しが失敗した場合、ユーザーがログオンできるダイアログ ボックスをポップアップ表示してから、アクションを自動的に再試行します。

私のクライアント コードには、おそらく 50 回の Ajax 呼び出しがあります。これをグローバルに行う方法はありますか?なんらかの簡単な jQuery ソリューションがあればいいのですが。人々は何を試しましたか?

4

2 に答える 2

1

401 HTTP ステータスを返す必要があります - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

次に、グローバル ajax イベント ハンドラー.ajaxError()を使用できます。

$( document ).ajaxError(function( event, jqxhr, settings, exception ) {
    if ( jqxhr.status== 401 ) {
        $( "div.log" ).text( "Triggered ajaxError handler." );
    }
});
于 2013-08-03T01:27:42.477 に答える