Когда я ввожу свои учетные данные для моей программы входа в систему, разработанной в Codeigniter, сеансы, похоже, не сохраняются в таблице ci_sessions в базе данных MySQL.
После заполнения формы сессия будет установлена в файле controller.php (пример кода ниже):
if ($this->form_validation->run()) { $data = array( 'email' => $this->input->post('email'), // posting the email input field 'is_logged_in' => 1 ); $this->session->set_userdata($data); redirect('main/members'); } else { $this->load->view('login'); }
В настоящий момент он выводит следующее при выполнении:
Array ( [__ci_last_regenerate] => 1440877455 [email] => jhon@gmail.com [is_logged_in] => 1 )
Вывод использует следующий код в view.php
print_r($this->session->all_userdata());
Массив должен выводить что-то похожее ниже, но его нет:
Array ( [session_id] => dd7e0e2266da6481ef45faaa7e3c808b [ip_address] => 127.0.0.1 [user_agent] => Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 [last_activity] => 1387619782 [user_data] => [username] => Jhon [email] => jhon@gmail.com )
config.php:
$config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; $config['sess_encrypt_cookie'] = FALSE; $config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'ci_sessions'; $config['sess_save_path'] = NULL; $config['sess_match_ip'] = TRUE; $config['sess_match_useragent'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE;
autoload.php
$autoload['libraries'] = array('database', 'session', 'form_validation'); $autoload['drivers'] = array('session'); $autoload['helper'] = array('url', 'form', 'html', 'security');
Я проверил config.php, чтобы убедиться, что все правильно настроено и указано в руководстве на веб-сайте Codeigniters, но до сих пор не радует решение проблемы.
Любая идея о том, почему это происходит? ИЛИ Любые возможные решения?
Здесь есть ряд проблем …
В настоящий момент он выводит следующее при выполнении:
массив ( [__ci_last_regenerate] => 1440877455 [email] => jhon@gmail.com [is_logged_in] => 1 )…
Массив должен выводить что-то похожее ниже, но его нет:
массив ( [session_id] => dd7e0e2266da6481ef45faaa7e3c808b [ip_address] => 127.0.0.1 [user_agent] => Mozilla / 5.0 (Windows NT 6.1) AppleWebKit / 537.36 (KHTML, например, Gecko) Chrome / 31.0.1650.63 Safari / 537.36 [last_activity] => 1387619782 [user_data] => [username] => Jhon [email] => jhon@gmail.com )
Нет, это не должно … вы не устанавливаете «имя пользователя» в любом месте, а остальные объясняются в руководстве .
Давайте проверим вашу конфигурацию сейчас …
$config['sess_driver'] = 'files';
^ Эта строка сообщает библиотеке, какое хранилище использовать. Если он установлен в «файлы», вы не можете ожидать, что сеансы будут сохранены в базе данных …
$config['sess_encrypt_cookie'] = FALSE;
^ Этот параметр устарел; он ничего не делает на CI 3.0.x.
$ config ['sess_use_database'] = TRUE;
^ Поскольку вы установили $config['sess_driver']
, этот параметр игнорируется – удалите его.
$config['sess_table_name'] = 'ci_sessions';
^ Это также игнорируется, и вы не должны использовать его с CI3. $config['sess_save_path']
этого установите $config['sess_save_path']
.
$config['sess_save_path'] = NULL;
^ Вы не должны оставлять это до NULL. Как руководство, так и встроенные комментарии в файле config.php на складе говорят, что настройка ТРЕБУЕТСЯ!
$config['sess_match_useragent'] = FALSE;
^ Это также ничего не делает в CI3.
$autoload['drivers'] = array('session');
^ Ничто в документации не говорит об этом, и оно ничего не делает.
Я проверил config.php, чтобы убедиться, что все правильно настроено и указано в руководстве на веб-сайте Codeigniters, но до сих пор не радует решение проблемы.
Напротив, вы не обратили внимание даже на самую основную документацию, которая представляет собой краткое описание в конфигурационных файлах … Вы, очевидно, просто скопировали старые настройки из CodeIgniter 2.x и не следили за инструкции по обновлению .
Вот что я посоветую вам сделать
$data = array( 'email' => $this->input->post('email'), // posting the email input field 'is_logged_in' => 1 ); //Use Var_dump($data) directly under the code above and add a die statement to check if the array actually contain the data as specified above $this->session->set_userdata($data); /* ** store the session inside a variable then var_dump it if it is really * in there */ $result = $this->session->set_userdata($data); var_dump($result);die;
Обратите внимание на изменения и попытайтесь выполнить повторное копирование только для подтверждения того, действительно ли эти данные хранятся в массиве, а также проверить, доступен ли сеанс внутри результата $ result