2017-11-23 23 views
0

私は長い間、以下の問題に苦しんでいます。
ここに必要な詳細があります。
言語:PHP
フレームワーク:Codeignitor
ライブラリ:管理パネルの場合、我々は尊敬レコードを一覧表示するDatatable.jsを使用している:問題はDatatable JSを使用してPHPセッション管理を処理する方法

Datatable.js(クライアント側) 。セッションが終了している間にまだ開いているページがほとんどない場合、エラー(添付画像)が発生しています。 注::ページをリフレッシュすると管理者のログインページにリダイレクトされますが、ページを更新せずに解決策が必要です。 enter image description here

私は説明が問題の整理に役立つことを願っています。前もって感謝します。 :)

+0

?私にとっては、それは単にブロックオーバーヘッドと思われる。 – davidkonrad

+0

@davidkonradは、管理パネルがajaxを使用すべきでないことを暗示していますか? admin = logged in = sessions – Alex

+0

@Alexいいえ、スクリプト内のセッションは避けてください。ブロックされないように閉じる必要があるコンテンツを提供するAJAXスクリプトで、 'start_session()'の利点を見ることはできません。あなたは参照元にアクセスできます。リクエストにチケットを追加することができます。代わりに、クロスドメインアクセスなどを防ぐことができます。 – davidkonrad

答えて

0

私が起こっていると思われるのは、あなたがページを開いてセッションが終了し、ユーザーがAjaxで何かを要求したときにページがログインページにリダイレクトすることです。したがって、ネットワークトラフィックと要求されたアクションを見ると、リダイレクトされたページが表示され、有効なJsonレスポンスではないため、エラーが表示されます。

私のサイトにも同様のことがあります。基本的に、ユーザーがログインする必要があるすべてのページは、ユーザーがログインしてページを表示できるかどうかを確認する機能によって保護されています。そうでない場合、2つの事のいずれかが起こり、ユーザーがリダイレクトされます。または、要求タイプがAjaxの場合、Jsonエラーを解析します。

私が概説したものと同様のものを採用することをお勧めします。ちょっと注意すると、phpとjsスクリプトの両方でAjaxエラーを解析する際にPHPで同じ応答形式を使用することが連続性にとって重要です。

例:でも、AJAXとのセッションを使用する理由

public function protect($allowed = array()) 
{ 
    $uri = uri_string(); 
    // user isn't logged in 
    if (!$this->ion_auth->logged_in()) { 
     if ($this->input->is_ajax_request()) { 
      encode_response('error', $this->lang->line('login_expired')); 
     } elseif ($uri == rtrim($this->success_login_redirect, '/')) { 
      redirect(CMS_DIR_NAME . '/login'); 
     } else { 
      $this->session->set_userdata('login_redirect', '/' . $uri); 
      redirect(CMS_DIR_NAME . '/login'); 
     } 
    } 
    $this->session->unset_userdata('login_redirect'); 
    if (!$this->ion_auth->is_admin() && !$this->ion_auth->in_group($allowed, $this->curr_user->id())) { 
     if (!$this->is_user_allowed($this->curr_user->group()->name)) { 
      show_error($this->lang->line('messages_page_access'), 403, 'Error'); 
     } 
    } 
} 
+0

入力いただきありがとうございます@alex あなたの提案は、Ajaxコールからの特定のメッセージを解析し、それに基づいてPHPスクリプトを使用してログインページにリダイレクトする必要があることを提案します。そうですか? –

+0

例を使って自分の答えを更新しました。基本的には、私が持っているすべてのコントローラの__construct()でprotect()が呼び出されています。セッションが終了した後のすべてのajaxリクエストは、createおよびjson_encodedエラーを生成します。私のjsで私は単にエラーが存在するかどうかをチェックし、そうであればエラーメッセージを解析し、あなたのケースではデータテーブルのレンダリングを避けますか?それは明確ですか?もちろん、特定のエラー 'session_expired'を呼び出して、それに基づいてjsでページをリフレッシュすることもできますが、私はこの方法で行います。なぜなら、ajaxを使用するすべてのjs関数はencode_responseを読み込み、エラーを表示するだけです。 – Alex

関連する問題