2010-07-27 3 views
11

세션 변수를 사용할 수 있습니까? 그 후에 바로 설정 해제 하시겠습니까?사용 후 세션 변수 지우기

예 :

양식을 제출
//==== 
//Process Form 
if ($_POST['Submit']) { 
    $update = $userSettings->update($_POST); 

    //If there are form errors 
if (!$update) { 
     //Load the errors into an array 
     $errors = $update[1]; 
    } else { 
     //Set the session 
     $_SESSION['showUpdated'] = true; 

     //Redirect to this page 
     header("Location: http://www.mysite.com/settings"); 
    } 
} 

//================== 

if ($_SESSION['showUpdated']) { 
echo "Settings Updated"; 
    unset($_SESSION['showUpdated']; 
} 

그래서 후, 오류가없는 경우 :

  • 가 (양식 제출
  • 페이지를 새로 고침 괜찮다고 말할 세션을 설정은
  • 'showUpdated'세션 변수가 설정된 경우 "업데이트 됨"메시지 표시
  • 세션 변수 설정 해제 (다음 재로드시 메시지가 표시되지 않도록)

현재 세션 변수를 직접 설정 해제하면 문제가 발생합니다. 마치 "존재하는"부분 앞에 설정을 해제 한 것과 같습니다.

모든 솔루션? 이것이 최선의 방법일까요?

감사합니다.

답변

3

정상적으로 작동하는 것 같습니다. 세션을 사용하기 전에 session_start()를 호출하고 리디렉션 헤더 후에 항상 exit() 또는 die()를 호출해야합니다.

나는 당신이하는 일을 조금 다르게 완성합니다. 나는 세션에서 '메시지'요소를 유지합니다. '귀하의 데이터가 저장되었습니다'와 같은 텍스트, 오류 메시지 등이 표시됩니다. 그런 다음 페이지 템플릿 클래스의 각 페이지에서 $_SESSION['message']이 설정되어 있고 비어 있는지 확인합니다. 거기에 뭔가가 있으면 메시지를 표시하고 값을 빈 문자열 또는 null로 설정합니다.

+0

exit() 또는 die()가 내가 놓친 부분이었습니다. 감사합니다! – steveneaston

1

존재하는지 확인하십시오. 이것은 정의되기 전에 수행하는 것이 안전하며 정의 된 후에 답을 알려줍니다.

if(!empty($_SESSION['showUpdated'])) { 
+1

Exists는 함수가 아니며, isset을 의미합니까? –

+0

그래, 그렇게. PHP로 코딩 한 이후로 잠시 동안 진행되었다고 말할 수 있습니까? Thanks @ Anders S – TheJacobTaylor

+0

배열이나 키가 존재하지 않는다고해서 내가 실수하지 않는다면 경고, 오류 또는 예외를 발생시키지 않을 것입니다. – TheJacobTaylor

3

나는 때때로 이렇게한다. 나는 그것에 어떤 문제도 가지지 않는다. 하지만 내가 당신에게 추가하는 것은 헤더 리디렉션 후에 exit() 함수 호출입니다.

편집 : exit()의 이유는 더 이상의 코드를 처리하지 못하게하고 리디렉션 후에 확인하기 전에 설정하지 않을 가능성을 없애기 때문입니다.

2

종료없이 헤더 호출을 수행하면 페이지가 계속 실행됩니다.

header("Location: http://www.mysite.com/settings"); 
exit;

대신 페이지를 죽이고 동일한 페이지 호출에서 세션 변수의 설정을 해제하지 말아야합니다.

0

또는 false로 설정할 수 있습니다.

 
if ($_SESSION['showUpdated']) { 
echo "Settings Updated"; 
$_SESSION['showUpdated'] = false; 
} 

그리고 5.3보다 작은 버전의 PHP를 사용하고있는 것 같습니다. 5.3에서는 초기화되지 않은 값을 사용할 때주의해야하기 때문입니다. 따라서 isset 함수를 사용해야합니다.

23

다른 문제를 일으킬 수있는 작은 오류가 있음을 확인했습니다.

unset($_SESSION['showUpdated']; 

unset의 끝 )이 오류가 발생합니다 것을 포함하지

unset($_SESSION['showUpdated']); 

할 필요가있다.