0

バックエンドには CodeIgniter を、フロントエンドには ExtJS 4.1 を使用しています。CIのコントローラーで、ユーザーセッションが終了したかどうかを確認し、終了した場合は実行します

リダイレクト ('ログイン');

ただし、実際には、サーバーからの応答を停止しましたが、ExtJS はまだ機能しており、ログインページを取得できません。セッションが終了したことをサーバー側で確認した場合、ExtJS からリダイレクトするにはどうすればよいですか?

ありがとう

レロン

4

3 に答える 3

2
var runner = new Ext.util.TaskRunner();

// poll some page every 10 seconds
var task = runner.start({
    run: function() {
        Ext.Ajax.request({
            url: 'is_logged_out.php',

            success: function(response){
                var json = Ext.JSON.decode(response.responseText);

                // is we are logged out then redirect somewhere
                if (json.isLoggedOut) {
                    task.destroy();
                    location.href = json.redirectToPage;
                }
            }
        })
    },
    interval: 10000
})
于 2012-05-11T11:29:13.480 に答える
1

403 エラーを処理する特別なロジックを追加することもできます (おそらく、バックエンドで ExtJs セッションが期限切れになったが、クライアントがまだページを開いている場合、次のリクエストでNot Authorizedメッセージが返されるはずです)。

Ext.Ajaxグローバルな Ajax イベントをサブスクライブする方法については、singleton クラスを確認してください。

于 2012-05-11T20:33:57.007 に答える
0

ユーザーのセッションが終了すると、通常はユーザー自身が特定の動作を実行して終了します。たとえば、ユーザーはログアウト ボタンを押します。その時点で、クライアント (ExtJS) は次のように AJAX リクエストをサーバーに転送する必要があります。

Ext.Ajax.request ({
  url: serverUrl + 'logout' ,
  success: function (response) {
    location.href = serverUrl + 'login';
  } ,
  failure: function (response) {
    // Something here to handle the failure
  }
});

ユーザーがログアウトすると、サーバーがその要求に到達します。CI アプリはセッションを介してクライアントに「200 OK HTTP/1.1」で応答し、クライアントはユーザーをログイン ページにリダイレクトします。

チャオ。

ウィルク

于 2012-05-11T11:31:09.810 に答える