Codeigniter 2.1.3:当'sess_use_database'== TRUE时,sess_destroy()会导致未定义索引:session_id等通知

ign*_*846 3 php session codeigniter

我一直在使用数据库检验出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
Run Code Online (Sandbox Code Playgroud)

我需要做些什么来解决这个问题?(我知道我可以关闭错误报告等,但我更感兴趣的是为什么会发生这种情况以及如何解决它).

我用它来创建表:

                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`)
                );
Run Code Online (Sandbox Code Playgroud)

会话lib是自动加载的.

Ben*_*ans 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'));
}
Run Code Online (Sandbox Code Playgroud)

  • 也是auth.php中其他地方的问题在文件的其余部分搜索"$ this-> tank_auth-> logout();" 并在那里应用上面的修复程序(当前点击reset_email()和activate()) (3认同)