销毁会话但保留flashdata

Bro*_*ke. 4 php session codeigniter tankauth

我在我的CI 1.7.3 App中使用Tank Auth进行用户管理.一切正常,但我正在尝试设置一个flash_message用户退出时显示.问题是该$this->tank_auth->logout();功能会破坏会话.我已经修改了Tank Auth库中的注销功能,如下所示:

    function logout()   {
        $this->delete_autologin();

        // See http://codeigniter.com/forums/viewreply/662369/ as the reason for the next line
        $user_session_data = array('user_id' => '', 'username' => '', 'status' => '');
        $this->ci->session->set_userdata($user_session_data);
        $this->ci->session->unset_userdata($user_session_data);
    }
Run Code Online (Sandbox Code Playgroud)

以前是这样的

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

在我的控制器中我有

function logout(){
    if ($this->tank_auth->is_logged_in()) { // logged in
        $this->session->set_flashdata('status_message', $this->lang->line('auth_message_logged_out'));
        $this->tank_auth->logout();

        redirect('');           

    } 
Run Code Online (Sandbox Code Playgroud)

}

如果我删除该$this->tank_auth->logout();功能消息显示正常.我确定这是一个简单的会话问题

Bre*_*dan 7

如果在调用后在同一请求中使用数据库时尝试设置flashdata sess_destroy(),则无法工作(因为没有会话要将flashdata附加到).

要解决此问题,请$this->ci->session->sess_create();在调用后添加sess_destroy().这是有效的,因为您在尝试向其追加数据之前重新创建会话.sess_destroy()如果您在数据库中使用会话,这是在使用flashdata之后的唯一方法.