Я создаю приложение, которое требует логин. Пользователь может войти в систему, и приложение определит, правильно ли он ввел учетные данные. Отсюда пользователю будет представлена панель с информацией, специфичной для него.
Как только пользователь введет правильные данные, выполняется следующий код:
$this->load->library('session');
$this->session->set_userdata('logged_in', true);
redirect('dashboard', 'refresh');
Приложение направит пользователя в правильное местоположение, которое содержит следующий код:
$this->load->library('session');
print_r($this->session->all_userdata());
Это отобразит стандартную информацию о сеансе (session_id, ip_address и т. Д.), Но данные, в которых я хранил данные, не отображаются.
Как мне исправить это так, чтобы данные сеанса были доступны на каждой странице?
Любая помощь будет принята с благодарностью.
Редактировать:
Вот текущие настройки для сессий / куки в config.php:
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = FALSE;
Когда вы входите в контроллер и используете CodeIgniter 2, вам необходимо установить сеансы в базе данных:
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = TRUE; // Change FALSE TO TRUE
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
конфиг / autoload.php
$autoload['libraries'] = array(
'database',
'session'
);
В config / config.php введите свой собственный ключ encryption_key
$config['encryption_key'] = 'FN3ig7JhmCeE9mWFc1BOetIt603qcr81';
Авторизоваться
public function index() {
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if ($this->form_validation->run() == FALSE) {
$this->load->view('common/login_view');
}
else {
$set_userdata = array(
'is_logged' => true,
'username' => $this->input->post('username')
);
$this->session->set_userdata($set_userdata);
redirect('success_page');
}
}
На вашей родительской части контроллера.
<?php
class dashboard extends CI_Controller {
public function __construct() {
parent::__construct();
if ($this->session->userdata('is_logged') == FALSE) {
redirect('your error page or login');
}
}
public function index() {
}
}
Посмотреть панель
<pre>
<?php print_r($this->session->all_userdata()); ?>
</pre>
Single
<?php echo $this->session->userdata('username'); ?>
Я бы порекомендовал использовать CodeIgniter 3 сейчас, http://www.codeigniter.com/.
Другой вариант — вы можете создать файл core / MY_Controller.php:
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
if ($this->session->userdata('is_logged') == FALSE) {
redirect('your error page or login');
}
}
}
А затем расширить контроллер, вам нужно включить сеансы:
<?php
class dashboard extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
}
}
Настройка данных в сеансе:
$this->load->library('session');
$this->session->set_userdata('logged_in', true);
redirect('dashboard', 'refresh');
Для печати данных $this->session->userdata
$this->load->library('session');
print_r($this->session->userdata); // For all userdata sessions
echo $this->session->userdata('logged_in'); // For a single value in a session with a key
Работа сессий CodeIgniter; это другая проблема. В config / config.php,
менять
$config['sess_cookie_name'] = 'ci_session';
в
$config['sess_cookie_name'] = 'cisession';
или же
$config['sess_cookie_name'] = 'chocolatechipsinyourcookies';
Дело в том, чтобы исключить подчеркивание в имени файла cookie. Это может вызвать проблемы.
И теперь, в файле config / autoload.php, около строки 56, автозагрузка библиотек сеансов и баз данных:
$autoload['libraries'] = array('database', 'session');
Это сохраняет некоторый код и гарантирует, что сеанс загружается первым.