2012-05-11 15 views
0

バックエンドにはCodeIgniterを使用し、フロントエンドにはExtJS 4.1を使用します。 CIのコントローラでIは、ユーザーセッションが終わったかどうかを確認し、私はセッション終了後のExtJSからのExtJS 4ログアウト

リダイレクトを実行する場合(「ログイン」)。

しかし、私はサーバーからの応答を得るために停止しますが、私のExtJSはまだ動作しており、私はloginpageを取得しません。セッションが終了したことをサーバー側で確認したら、どのようにしてExtJSからリダイレクトできますか?

おかげ

Leron

答えて

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 
}) 
0

ユーザーのセッションが終わった、一般的に特定の動作を実行することにより、ユーザ自身によって行われます。たとえば、ユーザーがログアウトボタンを押してください。次のようにまあ、その時点で、クライアント(ExtJSのは)前方のサーバにAJAX要求する必要があります:あなたのCIのアプリがセッションを介します:ユーザーのログアウトが、その要求は、サーバーが到達する

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

'200 OK HTTP/1.1'でクライアントに応答し、クライアントはユーザーをログインページにリダイレクトします。

チャオ

ウィルク

1

また、(あなたのExtJSセッションがバックエンドで有効期限が切れていますが、クライアントはまだページが開いていると思われる場合 - 次の要求は、バックNot Authorizedメッセージを取得する必要があります)403エラーを処理するために特別なロジックを追加することができます。

グローバルAjaxイベントの購読方法については、シングルトンクラスExt.Ajaxを参照してください。

+0

こんにちは。はい、問題は、ユーザーがExtJSで開いているページを持っていて何らかの理由でセッションがタイムアウトしている場合です。そのようなことが起こっても、ユーザーはそのページをナビゲートすることができます。サーバーへの呼び出しが行われると、ユーザーは情報を取得しません(タイムアウトしています)。また、リダイレクトはFirebugでのみ動作します。ページはHTMLレスポンスにロードされますが、ブラウザにはロードされないため、ユーザーは空白のウィンドウを見ることになります。私はあなたが言いたいことを見上げるつもりですが、私は、バックエンドにCIを使用すると、4xxの応答に問題があったと思います。 – Leron