9

私はionAuthを使用しています&ほとんど無作為にログアウトしているようですね?私はCodeigniter v2.1.4を使用しています - それは完璧には正常にログオンしますが、ionAuthは無作為にログアウトしているようですが、ionAuth-> logout関数を呼び出すまで、セッションを強制的にアクティブに保つ方法がありますか?IonAuth - 無作為にログアウトしているようです

次のように私のCIの設定は次のようになります。

$config['sess_cookie_name']  = 'cisession'; 
$config['sess_expiration']  = 7200; 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 600; 

次のように私のion_auth設定ファイルを探します:

$config['user_expire'] = 0; 
$config['user_extend_on_login'] = FALSE; 

は、誰も私の問題(複数可)を引き起こしている可能性がありますどのように任意のポインタを与えることができます?

+0

あなたはどこにでも任意のAJAX要求を作っていますか?まだ完全に対処されていないCIセッションクラスと競合条件に問題があります。 – jmadsen

+0

私はajaxリクエストを使用しています。ホームページには、基本的にデータベーステーブルを検索するGETリクエストを行うajaxリクエストがあります。 – Zabs

答えて

15

問題の原因は、AJAX呼び出しが行われた場合、適切な修正がCodeIgniterの3に

を含めたセッションクッキーの回転であるあなたは、4つのオプションがあります:

コープ: Iこの問題は、その原因を正確に知らなくても、直前に直面していました。つまり、HTTPステータスコード401に遭遇した場合、各XMLHttpRequestの約束を保存し、クライアント側のアプリケーションはポップアップの形でクレデンシャルを要求してから、AJAXの約束を再試行します。

jQueryを使って、クライアント側は、ちょうどこのajaxErrorハンドラを追加:だけ、

$(document).trigger('retry-xhr'); 

サーバー側:

$(document).ajaxError(function (e, xhr, settings, exception) { 
    if (xhr.status == 401) 
    { 
     // open your popup 
     $('#login-popup').modal('open'); 

     // attach the xhr object to the listener 
     $(document).bind("retry-xhr", { 
       xhro: xhr 
      }, 
      function(event) { 
      // retry the xhr when fired 
      $.ajax(event.data.xhro); 
     }); 
    } 
}); 

をし、あなたが戻ってログインしているとき、ちょうどあなたの要求を再試行するために、これを呼び出しますあなたのコンストラクタにifを追加する必要があります

if (!$this->session->userdata('logged_in') && $this->input->is_ajax_request()) 
     { 
      $this->output->set_status_header('401'); 
      exit; 
     } 

これは、彼らのWebアプリケーションのウィンドウが一晩開いてセッションのタイムアウトが発生すると、ユーザーはAJAXの機能を使用できないことについて私に電話をかけ、F5を押すように指示する必要があります。

ps は彼のソリューションはci_sessionテーブル内の別のフィールドを作成し、両方のクッキーをチェックし、そのセッションがまだ有効になりますし、この記事を参照してください:角に、私はHTTP認証インターセプタモジュールに成功

ハックを使用している場合回転後。

また、このグリッチ

http://www.hiretheworld.com/blog/tech-blog/codeigniter-session-race-conditions

アップグレード原因を詳細に説明します。 スタートそれはすでに固定の次期バージョンで使用して:

https://github.com/EllisLab/CodeIgniter/tree/release/3.0

パッチを システム内の行346を/ライブラリ/セッションPHP(関数sess_update())

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now) 

付:

if (($this->userdata['last_activity'] + $this->sess_time_to_update) >= $this->now || $this->CI->input->is_ajax_request()) 
+0

私はそれを試してみます - v2.1.4からv3のcodeigniterにアップグレードするための良いガイドがありますか? v2アプリケーションをv3互換にするための多くの回避策を実行する必要がありますか? – Zabs

+1

あなたのアプリケーションが何をするかによって、私の意見で最も大きな変化は、**関数**が** false **ではなく** null **を返すということです。あなたのアプリケーションロジックがそれに依存しているなら、それらの関数名のためにすばらしい時間を誇りにするでしょう。私はこれがアップグレードの最も賢明なガイドだと信じています:[CI 3.00へのアップグレード](https://www.chuongduong.net/ci3/installation/upgrade_300.html) –

+0

これに感謝します。いずれにしても、あなたが提供した有益な情報の恩恵を受けることができます - ありがとうございました:) – Zabs

関連する問題