Не удается отобразить flashdata после использования метода logout() 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 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');
}

Я повторяю это как обычно, на мой взгляд, и на странице входа:

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

Как только удаляю метод $this->ion_auth->logout() все работает.

Я знаю, что метод logout() разрушает сеанс, поэтому я установил flashdata после, но когда я перенаправляюсь на страницу входа, я все еще не получаю сообщение. Похоже, так же это настроено и в репозитории github.

Есть идеи?


person Timothy Fisher    schedule 08.02.2017    source источник


Ответы (3)


Сервер не будет создавать сеанс после уничтожения сеанса, пока на сервер не будет сделан новый запрос. Просто создайте другую функцию в своем контроллере и после выхода из системы перенаправьте ее на эту функцию и установите флэш-данные в этой функции, а также перенаправьте ее туда, куда вы хотите.

Пример:

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');
}
person BTree    schedule 21.07.2017

Это связано с тем, что выход из системы уничтожает сеанс, и нет нового сеанса, готового к использованию, до следующего обновления с тем, как CI обрабатывает сеансы.

Код для заметок находится здесь https://github.com/benedmunds/CodeIgniter-Ion-Auth/blob/2/libraries/Ion_auth.php#L417

person Ben Edmunds    schedule 09.02.2017
comment
Понятно! Есть ли способ обойти это? Возможно, например, перенаправить дважды, один раз для создания сеанса, сохранения сообщения, а затем снова перенаправить? - person Timothy Fisher; 10.02.2017

Вы можете использовать unset_userdata, чтобы сохранить ваши 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);
    }
  }
person Aep Nat    schedule 30.01.2018