2017-02-08 13 views
1

私はCodeIgniterでIon Authを使用していますが、logoutメソッドの使用後にセッションデータを表示する方法を理解できません。Ion Auth logout()メソッドを使用した後で表示するためのflashdataを取得できません

私はこのようなログアウト方法があります。これを呼び出しているメソッドは、パスワード変更方法である

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'); ?> 

を削除するとすぐにメソッドはすべて動作します。

私はlogout()メソッドがセッションを破壊するので、後でflashdataを設定する理由がわかりますが、ログインページにリダイレクトしてもまだメッセージが表示されません。これはgithubリポジトリにも設定されているようです。

アイデア?

答えて

0

これは、ログアウトによってセッションが破壊され、CIがセッションを処理する方法で次のリフレッシュが行われるまで、新しいセッションは使用できなくなるためです。

注意するコードはここにhttps://github.com/benedmunds/CodeIgniter-Ion-Auth/blob/2/libraries/Ion_auth.php#L417

+0

がそれを手に入れました!これを回避する方法はありますか?おそらく、セッションを作成するために1回、セッションを作成するために、メッセージを保存して、再度リダイレクトするように、2回リダイレクトしますか? –

1

新しい要求がサーバーに行われるまで断絶がセッションを破壊した後、セッションを作成しませんです。コントローラに別の機能を作成してから、その機能にログアウトしてリダイレクトした後、その機能でフラッシュデータを設定し、必要な場所にリダイレクトします。

例:

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'); 
} 
0

あなたのflashdataを保つために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); 
    } 
    } 
関連する問題