2016-05-25 17 views
0

私のconfig.phpでは、私の設定ファイルのセッション関連の設定は以下の通りです。コードイグナイタでセッションタイムアウトを延長するには?

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 1800; //30 minutes 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'rd_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 

サイトの通常の使用状況では、セッションはログインの30分後に終了します。しかし、私は自分のウェブサイトにユーザーがタイマーベースのタスクを再生できる機能を持っています。 たとえば、ユーザーがボタンをクリックすると、タイマーが開始され、何度か何らかのタスクが実行され、終了ボタンがクリックされ、タイマーが停止してデータベースに時間が保存されます。

ここでの問題は、タスクが30分を超えることがあるため、ユーザーがタイマーを再生しているときにセッションが終了することです。他のユーザー(タイマーを再生していない人)は30分後にタイムアウトしなければならないので、設定でsess満了時間を変更することはできません。したがって、other threadで提案されているように、ユーザーがタイマーを開始すると、sess満了時間を動的に変更するajax呼び出しを行います。 -

public function sessiontimeout($time){ 
    $session_lifetime = $time > 0 ? $time: 864000; 
    $this->config->set_item('sess_expiration', $session_lifetime); 
    echo "Session lifetime set to ".$this->config->item("sess_expiration")." seconds"; 
    exit; 
} 

これはうまくいきませんでしたが、ユーザーは30分でログアウトします。どのようにタイマーをクリックしたときにこれを達成できますか?ajax呼び出しが既存のタイムアウトを延長するために行われ、タイマーが停止するとセッションの有効期限が30分にリセットされます。

ありがとうございました

答えて

2

唯一のことは、私は2分ごとにajax呼び出しを行い、セッションが期限切れになるかどうかを確認しました。そして、私はセッションが満了する5分前にリセットします。コード

Javascript ajax call。

var sessionTimer = setInterval(function(){ 
    $.ajax({ 
      url: '/ajax/sessiontimeout', 
      beforeSend: function(){}, 
      success: function(data){ 
       console.info(data); 
      } 
     }); 
},120000); 

とコントローラメソッド

public function sessiontimeout(){ 

     $lastActivity = $this->session->userdata('last_activity'); 
     $configtimeout = $this->config->item("sess_expiration"); 
     $sessonExpireson = $lastActivity+$configtimeout; 


     $threshold = $sessonExpireson - 300; //five minutes before session time out 

     $current_time = time(); 

     if($current_time>=$threshold){ 
      $this->session->set_userdata('last_activity', time()); //THIS LINE DOES THE TRICK 
      echo "Session Re-registered"; 
     }else{ 
      echo "Not yet time to re-register"; 
     } 

     exit; 
    } 
2

こんにちは、設定ファイルを変更する必要はありません。記録されたコントローラ機能の後に、あなたのanytimeの時間間隔のあとにajaxを実行するだけです。
ajaxリクエストを通じてログイン後のURLを打つことを意味します。 codeigniterは現在のログインユーザーセッションを自動更新します。それは単純です

関連する問題