Я тестировал функцию 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 автоматически загружается.
Это вызывает вашу проблему с выпуском 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');
Ваша конфигурация, кажется, в порядке, возможно, вы пытаетесь выйти из системы дважды. Если есть проблема, пожалуйста, покажите свой код выхода.