2013-04-18 3 views
2

사용자가 로그인하고 로그 아웃 할 수 있어야하는 웹 페이지를 만들려고합니다. 이 모든 작품 잘하지만, 사용자는 여기 CodeIgniter, PHP 및 세션이 파괴 될 때 프론트 페이지 다시로드

는 일부 코드의 ... 페이지가 다시로드 두 번 로그 아웃 단추를 누르거나 적어도 그게 내가 볼 방법은 필요합니다 :

이가이다

다음
<div id="topmenu"> 
     <?php 

     if(!isset($_SESSION['check'])) { 
     echo ' Welcome, <a href="/index.php/login/">Log In</a> <a href="/index.php/register/">Register</a> '; 
     } 
     else { 
     echo ' Welcome, ' .$_SESSION['name'] .'! <a href="/index.php/login/destroy/">Sign Out</a>'; 
     } 

     ?> 
</div> 

는 로그인 아웃 버튼을 누를 때이 기능은 로그인 컨트롤러

public function destroy() 
    { 
     session_destroy(); 
     $this->load->view('frontpage'); 
    } 

에서 수행하는 프론를 파괴 무엇 옵션을 로그 아웃 /의 로그와, 내 페이지 맨 위로 tpage보기가로드되지만 상단 (최상위 메뉴 div)의이 막대는 그대로 유지되고 세션이 삭제 된 경우에도 로그 아웃 옵션을 표시합니다.

+1

이 시점에서 뷰를로드하면 모든 내부 변수가 설정됩니다. 여기에보기를로드하지 말고 _redirect_를 첫 페이지에 추가하면 새 요청이 만들어지고 CI는 처음부터 로그인 한 사용자가 없다는 것을 알 수 있습니다. – CBroe

답변

2

:

로 세션() 현재의 세션과 관련된 모든 데이터를 파괴합니다. 세션과 관련된 전역 변수를 설정 해제하거나 세션 쿠키를 설정 해제하지 않습니다.

리디렉션과 같은 페이지로드를 강제로 제거해야합니다.

바꾸기 $ this-> load-> view ('frontpage'); with redirect ('frontpage'); 전면 페이지라고하는 컨트롤러로 리디렉션 또는 리디렉션 (current_url()); 현재 페이지로 리디렉션.

CI의 session class을 사용하면 더 좋은 결과를 얻을 수도 있습니다.

0

변수는 다음 다시로드 할 때까지 계속 초기화됩니다. unset ($ _ SESSION [ 'check'])을 사용하여 check 변수를 수동으로 설정 해제하거나 리디렉션을 사용하십시오. PHP.net에서

관련 문제