Codeigniter Can';使用Ion Auth logout()方法后,无法获取要显示的flashdata

Codeigniter Can';使用Ion Auth logout()方法后,无法获取要显示的flashdata,codeigniter,ion-auth,Codeigniter,Ion Auth,我正在将Ion Auth与CodeIgniter一起使用,在使用注销方法后,我不知道如何获取要显示的会话数据 我有这样的注销方法: public function logout() { $this->ion_auth->logout(); $this->session->set_flashdata('msg', '<div class="has-success"><span class="help-block">Your pass

我正在将Ion Auth与CodeIgniter一起使用,在使用注销方法后,我不知道如何获取要显示的会话数据

我有这样的注销方法:

public function logout() {

    $this->ion_auth->logout();
    $this->session->set_flashdata('msg', '<div class="has-success"><span class="help-block">Your password has been successfully changed. Please login to continue!</span></div>');
    redirect('users/login');

}
if ($this->ion_auth->change_password($identity, $this->input->post('old_password'), $this->input->post('password'))) {
    $this->logout();
} else {
    $this->session->set_flashdata('msg', '<div class="has-error"><span class="help-block">'.$this->ion_auth->errors().'</span></div><div class="has-error"><span class="help-blocK"></span></div>');
    redirect('users/change_password');
}
public函数注销(){
$this->ion_auth->logout();
$this->session->set_flashdata('msg','您的密码已成功更改。请登录以继续!');
重定向(“用户/登录”);
}
调用此方法的方法是更改密码方法,我这样调用它:

public function logout() {

    $this->ion_auth->logout();
    $this->session->set_flashdata('msg', '<div class="has-success"><span class="help-block">Your password has been successfully changed. Please login to continue!</span></div>');
    redirect('users/login');

}
if ($this->ion_auth->change_password($identity, $this->input->post('old_password'), $this->input->post('password'))) {
    $this->logout();
} else {
    $this->session->set_flashdata('msg', '<div class="has-error"><span class="help-block">'.$this->ion_auth->errors().'</span></div><div class="has-error"><span class="help-blocK"></span></div>');
    redirect('users/change_password');
}
if($this->ion\u auth->change\u password($identity,$this->input->post('old\u password'),$this->input->post('password')){
$this->logout();
}否则{
$this->session->set_flashdata('msg','.$this->ion_auth->errors();
重定向(“用户/更改密码”);
}
我在登录页面上的视图中也像往常一样重复了它:

<?php echo $this->session->flashdata('msg'); ?>

只要我删除
$this->ion\u auth->logout()
方法,一切都会正常工作

我知道
logout()
方法会破坏会话,所以我会在之后设置flashdata,但是当我重定向到登录页面时,仍然没有收到消息。在github回购协议中似乎也是这样设置的


有什么想法吗?

这是因为注销会破坏会话,并且在下次刷新CI处理会话的方式之前,没有新会话可以使用


此处要注意的代码是

服务器在销毁会话后不会创建会话,直到向服务器发出新请求。只需在控制器中创建另一个函数,注销后重定向到该函数,并在该函数中设置flashdata,然后将其重定向到所需的位置

示例:

public function logout() {
    if ($this->ion_auth->logged_in()) {
        $this->ion_auth->logout();
        redirect(base_url() . 'front/logout_message', 'refresh');
    }
    redirect(base_url(), 'refresh');
}

public function logout_message() {
    $this->session->set_flashdata('message', 'Successfully! Logged Out!');
    redirect(base_url(), 'refresh');
}

您可以使用
unset\u userdata
保存您的flashdata

使用以下功能注销并保留flashdata:

 function logout_with_flashdata(){
    $ci =& get_instance();
    foreach($ci->session->userdata as $k => $v){
      if($k == 'message' || $k == '__ci_vars'){
        continue;
      }
      $ci->session->unset_userdata($k);
    }
  }

知道了!有办法解决这个问题吗?也许像重定向两次,一次创建会话,存储消息,然后再次重定向?