2012-05-03 2 views
1

에코를 시도하는 동일한 페이지에서 세션 변수를 지울 때 세션 변수가 비어 있다는 이상한 문제가 있습니다. 여기에 내가하려고하는 일의 빠른 유형 업이 있습니다.세션 변수가 동일한 페이지에서 지워지면 에코되지 않습니까?

이 예를 선택하십시오.

페이지 A :

$_SESSION['referer'] = 'abc123'; 
header('Location: http://www.test.com/pageb.php'); 
exit(); 

페이지 B : 이제

function get_referer() { 

    $referer = ''; 
    if (isset($_SESSION['referer'])) { 
     $referer = $_SESSION['referer']; 
     $_SESSION['referer'] = null; 
     unset($_SESSION['referer']); 
    } 
    echo $referer; 
} 

나는 기능과 페이지 B에 이렇게 ...

나는 그것을 실행하는 경우 모두 작동합니다 :

get_referer(); 

입력의 value 속성에 echo를 실행하면 (호출 후 지워지므로 페이지에서 한 번만 함수를 실행해야합니다), 소스를 볼 때 아무것도 표시하지 않습니다 .

<input type="hidden" name="referer" value="<?php get_referer(); ?>" /> 

그러나 충분히 재미있게 입력 유형을 "text"로 설정하면 문제가 없습니다.

<input type="text" name="referer" value="<?php get_referer(); ?>" /> 

문제는

+0

재현 할 수 없습니다. 제발, 우리에게 전체 소스 코드를 제공하십시오. 두 페이지 모두에서'session_start()'를 기억하고 있다고 가정합니까? – kba

+0

문제를 정확히 지적하고 시연 해주는 좋은 직장입니다. – octern

+0

@Kristian Antonsen, 나는 나의 모범을 보았고 그것이 원래의 맥락에서 작동한다는 것을 알아 차렸다. 문제를 더 자세히 조사하기 위해 질문을 업데이트했습니다. – Fase

답변

1

당신은 당신이 type="text"를 사용한다면 당신이 가진 것과 같은 페이지를보고하지 않을

<input type="hidden" name="referer" value="<?php get_referer(); ?>" /> 

와 컨텐츠를 출력하고 있습니다. type="hidden"을 사용하는 경우 브라우저를 마우스 오른쪽 버튼으로 클릭하고 소스보기을 선택하면됩니다. 문제는 동일한 브라우저 (예 : Chrome)가 페이지를 새로 고침 할 때 발생한다는 것입니다. 즉, 일단 페이지를로드하면 이 실제로 포함되어 있지만 페이지를 볼 때 페이지가 새로 고쳐 지므로 세션이 더 이상 존재하지 않으므로 value은 비어 있습니다.

+0

왜 Downvoter가 설명해 주나요? – kba

0

어쩌면 당신이 get_referer()를 두 번 호출 = "숨겨진"입력 유형에 대한 value 속성에 발생?

처음에는 referer를 표시하고 설정을 해제합니다. 입력을 호출하면 세션에서 referer가 더 이상 존재하지 않으므로 아무 것도 인쇄하지 않습니다.

+0

기본 ctrl + f는 내가 분명히 아닙니다. – Fase

관련 문제