【问题标题】:Session is not getting unset when signing out退出时会话未设置
【发布时间】:2022-01-07 02:35:42
【问题描述】:

我在 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 中使用数组时会话没有被取消设置。

在本地主机中它正在工作,但在现场不工作。在现场,我不得不使用按键来取消设置用户数据。

【问题讨论】:

  • 试试$this->session->sess_destroy();
  • $this->session->unset_userdata('loginname') ;键名使用
  • 我不能使用sess_destroy,因为它会破坏整个会话
  • CI 版本 2.1.0 和 PhP 版本 7.2.34

标签: php codeigniter codeigniter-2


【解决方案1】:

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

unset_userdata() 可用于删除它(会话),通过传递会话密钥

这个函数也可以传递一个项目的关联数组到 未设置。

来源: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 中,此函数已更改并接受“正常”数组,如您的代码示例中所示

【讨论】:

    【解决方案2】:
    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']);
    

    【讨论】:

    • 使用上面的代码就可以了
    猜你喜欢
    • 2018-09-22
    • 2016-04-06
    • 2019-12-29
    • 1970-01-01
    • 2013-05-13
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多