2014-09-17 2 views
-1

내 시스템에서 계정 로그 아웃을 코딩하는 방법은 무엇입니까? header()를 사용하여 인덱스 페이지로 돌아가서 모든 세션 변수를 삭제했습니다. 그것은 세션을 파괴하지만 세션 변수 (예 : 사용자 이름)없이 이전 페이지로 돌아갑니다 내 웹 사이트의이 로그 아웃 모듈을 수행하는 가장 좋은 방법은 무엇입니까?PHP, 계정을 로그 아웃하는 방법? session_destroy가 도움이됩니까?

+0

_ "하지만 세션 변수가없는 이전 페이지로 돌아갑니다 사용자 이름으로) "_ - 왜 사용자가 매우 구체적으로 로그 아웃했을 때 이러한 값을 가져야합니까? – CBroe

+0

당신이 원하는 것이 분명하지 않습니다. 세션을 삭제 한 후 사용자 이름을 계속 기억 하시겠습니까? 로그 아웃 할 때 MySQL 데이터베이스에 로그 아웃 시간 등을 기록한 다음 세션 쿠키를 삭제할뿐만 아니라 전체 세션을 설정 해제하고 파괴합니다. 세션 정보가 필요한 다른 페이지는 유효한 세션이없는 경우 오류 경고를 보내거나 일부 페이지로 리디렉션해야합니다. – Stefan

+0

안녕 스테판! 위대한 도움 :) 나는 '웹 사이트/로그 아웃을 이미 종료했다'는 브라우저의 버튼을 클릭하고 싶은 경우 잘못된 페이지를 표시하고자하므로 모든 페이지에 세션이 필요합니다. 변하기 쉬운? –

답변

0

당신은 단순히 내가하는 일이 더 많거나 적은이다 $_SESSION

1

을 비울 수 :

가 표시되어야하기 전에 유효한 로그인이 필요한 모든 페이지를하는뿐만 아니라 유효한 세션 변수 점검 해당 활성 로그인 세션 레코드를 데이터베이스에 저장합니다. 이러한 조건이 충족되지 않으면 오류 경고와 함께 사용자가 리디렉션됩니다.

<a href='logout.php'>Logout</a> 

logout.php 에서 :

function deleteSessionCookie() { 
    if (ini_get("session.use_cookies")) { 
     $params = session_get_cookie_params(); 
     setcookie(session_name(), '', time() - 42000, 
      $params["path"], $params["domain"], 
      $params["secure"], $params["httponly"] 
     ); 
    } 
} 

function deleteSessionIfExists() { 
    if (session_id() != "") { 
     $_SESSION = array(); 
     deleteSessionCookie(); 
     session_unset(); 
     session_destroy(); 
    } 
} 

session_start(); 

// record logout dateTime in db 
// Update existing record using $_SESSION["loginCode"] set during login. 

deleteSessionIfExists(); 

// redirect to index page of website 

편집 : 내 경우 I에서

session_start(); 
if (empty($_SESSION["loginCode"]) || empty($_SESSION["userCode"])) 
    header('index.php?alert=Invalid session'); 

: 로그인을 필요로하는 페이지의 상단에, 나는 이런 식으로 뭔가를 할 것이다 또한 로그인하는 동안 작성한 다른 많은 세션 변수가 있는지 점검하고 데이터베이스와의 일관성을 위해 세션 값을 점검합니다. (모든 테스트를 함수에 넣습니다. 예를 들어 isValidSession()이 true 또는 false를 반환합니다. 필요한 경우 모든 페이지에 쉽게 포함 할 수 있습니다.)

관련 문제