2011-12-30 21 views
2

MVCでプロジェクトを実装しました。そこでは、ほとんどのことをajaxリクエストで行いました。セッションのタイムアウトの問題に直面しています。だから、私はAJAXでいくつかのことをしてから、AJAXリクエストを行う前にセッションをチェックしてから、そのAJAXリクエストを処理します。すべてのJquery Ajaxヒットの前にセッションを確認してください。

私はajaxを使用するすべてのページに他の条件がある場合は書き込みしたくありません。

どうかご提案ください。

おかげ アトゥールは、私がプロジェクトでそれをやった

+0

春のセキュリティを使用していますか? –

+0

No ..私は春のセキュリティを使用していません –

+1

これはJavaベースのWebアプリケーションですか? –

答えて

1

を働きました。また、セッションタイムアウトを完全に回避するために、アイドルタイムアウトに関するアプリケーションプール設定を変更することはできませんか?

+0

$ .ajaxPrefilterは$ .getと同様に働きます。 –

+0

アプリケーションで$ .ajax()の呼び出しが行われる前に$ .ajaxPrefilter()が適用されますか? –

0

一つの方法は、一定の間隔でバックグラウンドで送信されるキープアライブAJAXリクエストを実装することでした...ので、あなたのセッションは取得しませんタイムアウトになった...

そうでないかもしれない非常にエレガントな方法が、それはたぶん、あなたがjQuery.ajaxPrefilter()(http://api.jquery.com/jQuery.ajaxPrefilter/)を確認する必要があります:)

+0

しかし、セッションタイムアウトの全ポイントは、一定期間活動がない場合は、セッション? –

+0

はい、セッションをタイムアウトさせたくないシナリオがあります(プロジェクトでは小さなイントラネットアプリケーションで、PHPセッションのタイムアウトをリセットできませんでした)、または編集ページやブログページがある場合テキストを挿入するのに時間がかかることがあります... – Vapire

0

jQuery-ajax、spring mvc、springセキュリティアーキテクチャで同じ問題がありました。

以下のとおりです。

セッションタイムアウトが発生した場合、春のセキュリティは要求をログインフォームコントローラにリダイレクトします。

リクエスト(保存済みリクエスト)がajaxリクエスト(ヘッダx-requested-with)であるかどうかを確認し、ajaxリクエストの場合はタイムアウトを示すjson/xml値を返します。例:{"session-timeout" : true}

次に、ajaxSuccess/ajaxErrorのようなグローバルjQuery ajaxイベントを使用してこのajax戻り値をテストし、セッションタイムアウトがあったかどうかを確認し、実行するアクションを実行します。

これまでのアプリケーションフレームワークを使用して、このようなことを試すことができます。

0

global filterを作成できます。グローバルフィルタはすべてのコントローラアクションに影響を与え、セッションが存在するかどうかを確認してから、ログインページにリダイレクトするか、それに従って何かを実行します。また、AJAXでpingを実行したビューやサーバーへの要求を保持するiframeを作成して、セッションを有効にしておくことで、セッションを有効に保つことができます。

このPHP一部(ファイルまたはコントローラメソッド)が呼び出されます:質問は、あなたは、セッションが長く、その後...

1

私はこの問題を回避する今日してきたし、これが私の解決策であることを生きて滞在したいんさ

// create your preferred way of returning a json object like { "isLogged": true } 
echo json_encode(array('isLogged' => checkSession())); 

、AJAX呼び出しを持っているし、ログインするユーザーが必要なすべてのページの先頭にこのスクリプトを置く:AJAXによって

$(document).ajaxSend(function(e, xhr) { 
    $.ajax({ 
     url: 'checkSession.php', 
     type: 'GET', 
     global: false, 
     success: function(session) { 
      if(!session.isLogged) { 
       xhr.abort(); 

       // This allows my framework to take care of the redirect 
       // and to remember the intended page, 
       // so it redirects back here after login: 
       location.reload(); 

       // use this one to redirect directly to the login page: 
       // window.location.replace('login.php'); 
      } 
     }, 
     dataType: 'json' 
    }); 
}); 

このajax呼び出しがajaxSendに入り、無限ループを作成しないようにするには、の部分が不可欠です。

関連する問題