2010-11-15 105 views
0

我想在Codeigniter中動態設置會話過期時間。我自動加載會話課程。我有一個包含用戶點擊複選框的視圖(請記住我)。如果他們點擊複選框,或者不是現在的到期時間保持不變:/幫助w/Codeigniter會話過期時間


    // Config.php 
    $config['sess_expiration']  = 7200; 

    // Controller 
    if ($this->input->post('remember_me') == 'TRUE') 
    { 
    $this->session->remember_me(); 
    } 

    $newdata = array(
    'failed_login' => 0, 
    'user_name' => $this->input->post('user_name'), 
     'logged_in' => TRUE 
    ); 

    $this->session->set_userdata($newdata); 

    // MY_Session.php 
    class MY_Session extends CI_Session { 

    function remember_me() 
    { 
     $this->sess_expiration = 172800; 
    } 

    } 

回答

3

如果你需要實現「記住我」的功能 - 那麼你以錯誤的方式啓動它。

您需要創建一個更多的數據庫表user_id | token

然後,在用戶登錄後(用「記住我」複選框選中) - 生成隨機標記並插入一個包含當前user_id和該標記的新行。另外 - 使用相同的標記值設置remember Cookie。

現在,如果用戶輸入您的站點,未通過身份驗證並擁有某個令牌 - 您始終可以找到該令牌並對用戶進行身份驗證(每個令牌都是唯一的,並且與特定的user_id緊密相關)。

0

這是我一直在玩的解決方案。

您可以編輯函數內部domain.com/system/libraries/Session.php

function _set_cookie($cookie_data = NULL) 

註釋掉

// $expire = ($this->sess_expire_on_close === TRUE) ? 0 : $this->sess_expiration + time(); 

然後添加

if(isset($this->userdata['rememberme'])){ 
     // If they want to stay connected 
     if($this->userdata['rememberme'] == 1) { 
      $expire = 0; 
     } else { 
      $expire = time() + $this->sess_expiration; 
     } 
    } else { 
     $expire = time() + $this->sess_expiration; 
    } 

請讓我知道如果這反過來幫助或修改我的代碼來幫助我。謝謝。

0
$data = array(
    'username' => $this->input->post('username'), 
    'ADMIN_is_logged_in' => true 
); 

$this->session->sess_expiration = '14400';// expires in 4 hours 
$this->session->set_userdata($data);// set session