注销时会话不会被取消

Session is not getting unset when signing out

我已经在 codeigniter 中创建了管理面板。登录工作正常,数据也在会话中设置。问题是当我单击注销时它不会清除会话数据。

我的控制器注销功能:

public function signout()
{
    
    $this->user_m->signout();
    redirect('admin','refresh');
}

user_m 模型注销函数:

public function signout()
{
    $adminsignindata = array('loginname','adminusername','userid','role_id','loggedin');
    $this->session->unset_userdata($adminsignindata);
}

我不知道为什么当我在 unset_userdata 中使用数组时会话没有被取消设置。

在 localhost 中它可以工作,但在 live 中不工作。在现场我不得不使用 key wise 取消设置 userdata。

Please use the below code it will work.
Put your session in array    

$session = [
     'user_name'    => 'msrinivas',
     'name'         => 'Srinivas'
];
$this->session->set_userdata('logged_console', $session);


unset session using array key
$this->session->unset_userdata(['logged_console']);

CI2.x会话库包含函数unset_userdata();它适用于字符串或关联数组:

unset_userdata() can be used to remove it (the session), by passing the session key.

This function can also be passed an associative array of items to unset.

来源:CI 2.x manual, Removing Session Data

在会话库中的函数 unset_userdata() 下方,第 500 行附近:

function unset_userdata($newdata = array())
{
    if (is_string($newdata))
    {
        $newdata = array($newdata => '');
    }

    if (count($newdata) > 0)
    {
        foreach ($newdata as $key => $val)
        {
            unset($this->userdata[$key]);
        }
    }

    $this->sess_write();
}

所以如果您继续使用版本 2.x,您需要将 $adminsignindata 更改为关联数组:

$adminsignindata = array('loginname'=>'','adminusername'=>'','userid'=>'','role_id'=>'','loggedin'=>'');

CI 3.x 中,此函数已更改并接受“正常”数组,如您的代码示例