由于某些原因,我需要销毁代码点火器中某个控制器中的所有会话,然后立即设置一个新会话。但是,如您在以下示例中看到的那样,似乎它在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;
您能指导我怎么了吗?
答案 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);