2015-06-16 84 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