2017-02-08 7 views
1

CodeIgniter와 함께 Ion Auth를 사용하고 있으며 logout 메서드를 사용한 후 세션 데이터를 표시하는 방법을 알 수 없습니다. 내가 메아리있어Ion Auth logout() 메서드를 사용한 후에 표시 할 flashdata를 가져올 수 없습니다.

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

} 

방법 :

는이 같은 로그 아웃 방법이 로그인 페이지에서 내보기에도 정상적으로 나타납니다.

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

$this->ion_auth->logout() 모든 것이 작동합니다.

나는 logout() 메서드가 세션을 파괴하므로, 이후에 flashdata를 설정 한 이유가 알고 있지만 로그인 페이지로 리디렉션하면 여전히 메시지가 표시되지 않습니다. 이것이 마치 github repo에서도 설정되는 것처럼 보입니다.

아이디어가 있으십니까?

답변

0

로그 아웃은 세션을 파괴하고 CI가 세션을 처리하는 방식으로 다음 새로 고침을 할 때까지 새로운 세션을 사용할 준비가되지 않았기 때문입니다. 주의 할

코드는 끊다가 새로운 요청이 서버로 될 때까지 세션을 파괴 한 후 세션을 생성하지 않습니다 여기 https://github.com/benedmunds/CodeIgniter-Ion-Auth/blob/2/libraries/Ion_auth.php#L417

+0

가 알았어요! 이 문제를 해결할 방법이 있습니까? 아마도 두 번 리디렉션하는 것과 같을 것입니다. 한 번 세션을 만들고 메시지를 저장 한 다음 다시 리디렉션합니까? –

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