我一直在测试使用数据库的会话的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`)
);
会话库自动加载。
答案 0 :(得分:31)
这导致了您的问题,发布了2.1.3:
修正了一个错误(#1314) - 会话库方法sess_destroy()没有销毁userdata数组。
$ this-> tank_auth-> logout()包含函数sess_destroy(); 所以在你调用它之后,你不能在$ this-> _show_message()中使用set_flashdata()。
您需要做的是创建一个新会话。这是你的注销方法在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'));
}
答案 1 :(得分:3)
只是为Ben的回答添加快速说明。他在识别问题时是正确的,但我发现,由于操作的顺序,在Tank_auth库中添加创建会话行更有效。
以下是Tank_auth.php库中修订的logout()函数:
/**
* 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();
}
答案 2 :(得分:0)
检查您的application/config/config.php
文件,看看您是否有$config[‘sess_use_database’] = TRUE
。
答案 3 :(得分:0)
我猜,刷新就是你所缺少的。 您是否尝试过重定向('注销','刷新');
答案 4 :(得分:0)
对于扎克: 由于您正在使用Tank auth,请确保您的注销功能是这样的: -
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');
您的配置似乎没问题,可能您正在尝试退出两次。如果仍有问题,请显示您的退出代码。