在销毁上一个会话后设置会话变量

时间:2015-06-16 14:33:14

标签: php codeigniter

单击“假登录”链接时,为什么第二页上的会话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';
    }

}

请注意,codeigniter中库中的会话设置为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;

2 个答案:

答案 0 :(得分:1)

不要简单地破坏会话,而是使用;

$this->session->sess_create();

这将创建一个全新的会话,在此期间销毁任何以前的会话。

我认为这是CI2中的一个错误,已在版本3中修复。

答案 1 :(得分: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