在Codeigniter中重定向后会话丢失

Zat*_*nna 19 php session redirect codeigniter

我使用codeigniter作为框架.

首先,我使用localhost但是当我更改为我的IP地址时,登录功能不再起作用.我发现重定向到另一个控制器后会话丢失了.

这是结果 print_r($this->session->all_userdata());

[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2 
[ip_address] => 10.42.68.71 
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
[last_activity] => 1285962398 
[user_data] =>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它没有传递任何数据,user_data但是在我测试时它是在重定向之前设置的.

我将控制器分成两个,第一个是用户 - >登录功能的处理程序,另一个是计划程序,我从用户控制器重定向的链接处理程序.

users.php (第一控制器):

$this->load->model('users_model');
$this->load->model('mymodel');
$this->load->database();

$email = $this->input->post('email');

$pass = $this->input->post('password');

$type = $this->input->post('type');

// Authenticate the user
$userdata = $this->users_model->auth_user($email,$pass,$type);

if($userdata)
{
    $data = array('FIRSTNAME' => $userdata->FIRSTNAME, 
                  'LASTNAME' => $userdata->LASTNAME, 
                  'EMAIL' => $userdata->EMAIL,
                  'LOGIN' =>TRUE, 'TYPE' => $type);
    $this->session->set_userdata($data);
    redirect('planner/view_system','refresh');
}
Run Code Online (Sandbox Code Playgroud)

planner.php (第二控制器):

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

    if ( ! ($this->session->userdata('LOGIN')))
    { 
        print_r (var_dump($this->session->userdata('FIRSTNAME')));
        print_r($this->session->all_userdata());
    }
    $this->load->helper(array('form','html','url'));
Run Code Online (Sandbox Code Playgroud)

这是我的配置

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;
Run Code Online (Sandbox Code Playgroud)

小智 2

首先,您必须确保会话项中没有特殊字符,例如“\n”或“\v”。这些字符可能会导致字符串在中间断裂。尝试修剪()寻求帮助。

如果没有用,可能是编码问题。尝试在设置会话项之前对其进行加密,并在需要使用时对其进行解密。