Codeigniter – данные сеанса не сохраняются в базе данных через массив

Когда я ввожу свои учетные данные для моей программы входа в систему, разработанной в 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, но до сих пор не радует решение проблемы.

Любая идея о том, почему это происходит? ИЛИ Любые возможные решения?

Solutions Collecting From Web of "Codeigniter – данные сеанса не сохраняются в базе данных через массив"

Здесь есть ряд проблем …

В настоящий момент он выводит следующее при выполнении:

 массив
 (
   [__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