2015-06-16 82 views
0

爲什麼當點擊「假登錄」鏈接時,第二頁加載的會話variable值不可用?銷燬前一個會話後設置會話變量

class Fake_login extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 

     echo $this->session->userdata('session_id') . '<br>'; 
     // First Page Load: ee3c7c5da6e465605cd57ad699aacdb3 
     // Second Page Load: c82adf312f123d56e3b7b6ab5ec6cafa 

     echo $this->session->userdata('variable') . '<br>'; 
     // First Page Load: false 
     // Second Page Load: false 

    } 

    function index($user_id = null){ 

     $this->session->sess_destroy(); 

     $this->load->library('session'); 
     $this->session->set_userdata('variable', 'approved'); 

     echo $this->session->userdata('session_id') . '<br>'; // ee3c7c5da6e465605cd57ad699aacdb3 
     echo $this->session->userdata('variable') . '<br>'; // approved 

     echo '<a href="/admin/fake_login/start/' . $user_id . '">Fake Login</a>'; 

    } 

    function start($user_id = null) { 
     echo 'here'; 
    } 

} 

請注意,在笨在庫中的會話設置爲autoload

這是我的會話配置:

$config['sess_cookie_name'] = 'cisession'; 
$config['sess_expiration'] = 172800; // 24 hours 
$config['sess_expire_on_close'] = FALSE; 
$config['sess_encrypt_cookie'] = TRUE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name'] = 'cisessions'; 
$config['sess_match_ip'] = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 172800; 
+0

請添加更多示例或場景。我並不真正瞭解你在問什麼。 – CodeGodie

+0

如果你已經自動加載會話,爲什麼你有這一行:'$ this-> load-> library('session');'? – CodeGodie

+3

而不是破壞會話,使用'$ this-> session-> sess_create();'創建一個全新的會話,它應該清除所有的數據。 – Craig

回答

1

而不是簡單地銷燬會話,使用;

$this->session->sess_create(); 

這將創建一個全新的會話,同時銷燬任何以前的會話。

我認爲這是CI2中的一個bug,在版本3中已修復。

0
function __construct() { 
     parent::__construct(); 

     echo $this->session->userdata('session_id') . '<br>'; 
     // First Page Load: ee3c7c5da6e465605cd57ad699aacdb3 
     // Second Page Load: c82adf312f123d56e3b7b6ab5ec6cafa 

     echo $this->session->userdata('variable') . '<br>'; 
     // First Page Load: false 
     // Second Page Load: false 

    } 

function index($user_id = null){ 

     $this->session->sess_create();//add this 

     $this->load->library('session'); 
     $this->session->set_userdata('variable', 'approved'); 

     echo $this->session->userdata('session_id') . '<br>'; // ee3c7c5da6e465605cd57ad699aacdb3 
     echo $this->session->userdata('variable') . '<br>'; // approved 

     echo '<a href="/admin/fake_login/start/' . $user_id . '">Fake Login</a>'; 

    } 

閱讀本

  1. Stack Overflow Question 01
  2. Stack Overflow Question 02