Сессия не работает при перенаправлении с одного контроллера на другой. В приведенном ниже примере я просто пытаюсь проверить вход в систему и, если действительный пользователь, затем установить имя пользователя для сеанса с контроллера с именем «Логин» и перенаправить на другой контроллер «Тестирование» и распечатать значение сеанса. Но, когда пользователь проверен, сессия работает нормально, пока мы не находимся в контроллере входа (я проверил, поставив print_r($this->session->userdata('username'));
, удалив метод перенаправления) и когда я перенаправляю, значение сеанса отображается пустым от перенаправленного контроллера.
Вот пример моего кода:
Контроллер: Логин. php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('M_login');
$this->load->helper('url');
$this->load->library('session');
$this->load->helper('form');
}
public function index()
{
$u=$this->session->userdata('username');
if($u) {
redirect('Testing');
} else {
$this->load->view('login');
}
}
public function login_form()
{
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_error_delimiters('<span class="error">', '</span>');
if($this->form_validation->run()==FALSE)
{
$this->load->view('login');
}
else{
$result = $this->M_login->takeUser();
if(count($result)>0)
{
$user = $this->input->post('username', TRUE);
$this->session->set_userdata('username', $username);
redirect('Testing');
}
else{
?>
<script>
alert('Failed Login: Check your username and password!');
history.go(-1);
</script>
<?php
}
}
}
public function logout()
{
$this->session->sess_destroy();
redirect('login/login_form');
}
}
Модель: M_login. php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class M_login extends CI_Model
{
public function __construct()
{
parent::__construct();
}
public function takeUser()
{
$username = $this->input->post('username');
$password1 = $this->input->post('password');
$password = md5($password1);
$this->db->select('username');
$this->db->from('employee');
$this->db->where('username', $username);
$this->db->where('password', $password);
$result = $this->db->get();
return $result->row_array();
}
}
Контроллер: Тестирование. php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Testing extends CI_Controller
{
public function __construct(){
parent::__construct();
$this->load->library('session');
}
public function index() {
print_r($this->session->userdata('username'));
}
}
Также у меня есть сеанс автозагрузки:
$autoload['libraries'] = array('database','session','form_validation', 'pagination', 'user_agent','encryption');