Codeigniter 2.1.3: sess_destroy () causa índice indefinido: session_id etc aviso quando ‘sess_use_database’ == TRUE

Estive testando o recurso do codeigniter com sessões usando o database, e sempre que eu desconectado (use sess_destroy ()) eu recebo os seguintes avisos:

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 

O que eu preciso fazer para consertar isso? (Eu sei que posso desligar o ect de relatórios de erros, mas estou mais interessado em por que isso acontece e como corrigi-lo).

Eu usei isso para criar a tabela:

  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`) ); 

A session lib é autoloaded.

Isso está causando seu problema, com a versão 2.1.3:

Corrigido um erro (# 1314) – O método da biblioteca de sessões sess_destroy () não destruiu a matriz userdata.

$ this-> tank_auth-> logout () contém a function sess_destroy (); Então, depois de ter chamado isso, você não pode usar set_flashdata () em $ this -> _ show_message ().

O que você precisa fazer é criar uma nova session. É assim que o seu método de logout parece ser o 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')); } 

Apenas para adicionar uma nota rápida à resposta de Ben. Ele está correto na identificação do problema, mas achei, por causa da ordem das operações, é mais efetivo adicionar a linha de session de criação na biblioteca Tank_auth.

Aqui está a function de logout () revisada na biblioteca 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(); } 

Verifique o application/config/config.php sua application/config/config.php e veja se você tem $config['sess_use_database'] = TRUE .

Eu acho, atualizar é o que você está perdendo. Você tentou redirect (‘logout’, ‘atualizar’);

Para Zach: uma vez que você está usando a autenticação Tank, certifique-se de que sua function de logout esteja assim:

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

Você também pode autoload os ajudantes e bibliotecas mais usados:

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

Sua configuração parece estar bem, talvez você esteja tentando sair duas vezes. Se ainda houver problema, mostre seu código de logout.