在codeginiter中的session_destroy之后如何设置用户数据?

时间:2018-12-22 20:17:01

标签: codeigniter codeigniter-3

由于某些原因,我需要销毁代码点火器中某个控制器中的所有会话,然后立即设置一个新会话。但是,如您在以下示例中看到的那样,似乎它在Codeigniter版本3.1.9中不起作用,或者我的用法错误。

我的Codeigniter中有此控制器:

<?php
class Test extends CI_Controller {
    public function index()
    {
        $this->load->library('session');
        $this->session->sess_destroy();
        $session_data = array (
            'key_1' => 'value_1',
            'key_2' => 'value_2',
            'key_3' => 3
        );
        $this->session->set_userdata($session_data);
        $this->session->set_userdata('key_4', 4);
        print_r($_SESSION);
    }

    public function next()
    {
        $this->load->library('session');
        print_r($this->session->all_userdata());
    }
}

当我打开MYDOMAIN.COM/test时,输出如下:

Array ( [__ci_last_regenerate] => 1545508348 [key_1] => value_1 [key_2] => value_2 [key_3] => 3 [key_4] => 4 )

但是在那之后,如果我打开MYDOMAIN.COM/test/next,则输出为空,如下所示:

Array ( [__ci_last_regenerate] => 1545509049 )

config.php中,会话配置就像下面这样(请注意,ci_sessions是可写文件夹):

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 60*60*1;
$config['sess_save_path'] = APPPATH . 'ci_sessions/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

您能指导我怎么了吗?

2 个答案:

答案 0 :(得分:0)

请考虑一下您在做什么。 首先,您只需通过调用$this->load->library('session')来开始会话。 然后,您立即使用$this->session->sess_destroy();停止会话。

您尝试的内容存在多个问题。 Read this了解更多信息。

您只需清除$_SESSION,然后向其中添加新数据,就会更好。

public function index()
{
    $this->load->library('session');
    // if you want a new session id uncomment the next line, needs to happen before you clear $_SESSION
    //session_regenerate_id();
    $_SESSION = array();
    // if you uncommented earlier then uncomment the next too
    //$_SESSION['__ci_last_regenerate'] = time();
    $session_data = array (
        'key_1' => 'value_1',
        'key_2' => 'value_2',
        'key_3' => 3
    );
    $this->session->set_userdata($session_data);
    $this->session->set_userdata('key_4', 4);
    print_r($_SESSION);
}

使用CodeIgniter> v3.0.0,您可以直接设置$_SESSION。该文档实际上建议这样做。考虑到这一点

$this->session->set_userdata('key_4', 4);

可以(应该)写

$_SESSION['key_4'] = 4;

set_userdata()对于快速快速设置许多$_SESSION键/值很有用。

也就是说,以下内容对我而言似乎不如先前的代码那么抽象。如果没有其他问题,它将使用少一点的内存并避免函数调用。

$_SESSION = array();
$_SESSION['key_1'] = 'value_1';
$_SESSION['key_2'] = 'value_2';
$_SESSION['key_3'] = 'value_3';
$_SESSION['key_4'] = 'value_4';
$_SESSION['__ci_last_regenerate'] = time();

抱歉,有时候我无法阻止自己进入演讲模式。

答案 1 :(得分:0)

使用:

/tmp

代替:

$this->session->sess_regenerate(true);