Codeigniter 2.1.3: sess_destroy () вызывает Неопределенный индекс: session_id и т. Д., Когда «sess_use_database» == TRUE

Я тестировал функцию codeigniter с сеансами, используя базу данных, и когда я выхожу из системы (используйте sess_destroy ()), я получаю следующие уведомления:

A PHP Error was encountered Severity: Notice Message: Undefined index: session_id Filename: libraries/Session.php Line Number: 272 A PHP Error was encountered Severity: Notice Message: Undefined index: ip_address Filename: libraries/Session.php Line Number: 272 A PHP Error was encountered Severity: Notice Message: Undefined index: user_agent Filename: libraries/Session.php Line Number: 272 A PHP Error was encountered Severity: Notice Message: Undefined index: last_activity Filename: libraries/Session.php Line Number: 272 A PHP Error was encountered Severity: Notice Message: Undefined index: session_id Filename: libraries/Session.php Line Number: 288 A PHP Error was encountered Severity: Notice Message: Undefined index: last_activity Filename: libraries/Session.php Line Number: 289 

Что мне нужно сделать, чтобы исправить это? (Я знаю, что я могу отключить отчет об ошибках, но меня больше интересует, почему это происходит и как его исправить).

Я использовал это для создания таблицы:

  CREATE TABLE IF NOT EXISTS `ci_sessions` ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(45) DEFAULT '0' NOT NULL, user_agent varchar(120) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id), KEY `last_activity_idx` (`last_activity`) ); 

Сессия lib автоматически загружается.

Solutions Collecting From Web of "Codeigniter 2.1.3: sess_destroy () вызывает Неопределенный индекс: session_id и т. Д., Когда «sess_use_database» == TRUE"

Это вызывает вашу проблему с выпуском 2.1.3:

Исправлена ​​ошибка (# 1314). Метод Session Library sess_destroy () не уничтожал массив userdata.

$ this-> tank_auth-> logout () содержит функцию sess_destroy (); Поэтому после того, как вы это вызвали, вы не можете использовать set_flashdata () в $ this -> _ show_message ().

Вам нужно создать новый сеанс. Вот как ваш метод выхода должен выглядеть в auth.php:

 /** * Logout user * * @return void */ function logout() { $this->tank_auth->logout(); // Destroys session $this->session->sess_create(); $this->_show_message($this->lang->line('auth_message_logged_out')); } из /** * Logout user * * @return void */ function logout() { $this->tank_auth->logout(); // Destroys session $this->session->sess_create(); $this->_show_message($this->lang->line('auth_message_logged_out')); } 

Просто добавьте краткую записку к ответу Бена. Он прав в определении проблемы, но я обнаружил, что из-за порядка операций более эффективно добавлять строку сеанса создания в библиотеку Tank_auth.

Вот пересмотренная функция logout () в библиотеке Tank_auth.php:

  /** * Logout user from the site * * @return void */ function logout() { $this->delete_autologin(); // See http://codeigniter.com/forums/viewreply/662369/ as the reason for the next line $this->ci->session->set_userdata(array('user_id' => '', 'username' => '', 'status' => '')); $this->ci->session->sess_destroy(); $this->ci->session->sess_create(); } 

Проверьте файл application/config/config.php и посмотрите, есть ли у вас $config['sess_use_database'] = TRUE .

Я думаю, обновление – это то, что вам не хватает. Вы пробовали переадресацию («выход из системы», «обновление»);

Для Заха: поскольку вы используете Tank auth, убедитесь, что ваша функция выхода из системы:

  function logout(){ if ($this->tank_auth->is_logged_in()) { $this->tank_auth->logout(); redirect(''); } } из  function logout(){ if ($this->tank_auth->is_logged_in()) { $this->tank_auth->logout(); redirect(''); } } 

Вы также можете автоматически загружать наиболее часто используемые помощники и библиотеки:

 $autoload['libraries'] = array('database','session','form_validation','pagination'); $autoload['helper'] = array('form','url','html'); 

Ваша конфигурация, кажется, в порядке, возможно, вы пытаетесь выйти из системы дважды. Если есть проблема, пожалуйста, покажите свой код выхода.