2012-09-22 2 views
1

사용자가 특정 페이지에 액세스하지 못하게하려면 사용자를 리디렉션해야합니다. 예를 들어 header('Location: ../acc/login.php');의 신뢰성은 어느 정도입니까? 브라우저가 302 개의 오류를 무시할 수 있습니까? 이것이 올바른 방법입니까? 미리 감사드립니다!PHP 헤더(); 신뢰성

+3

, 검색 엔진은 다음과 같은 내용을 무시하고 인덱스 할 수 있습니다. – DCoder

+4

302는 오류가 아니며 긍정적 인 응답 코드입니다. – Ozerich

+0

올바른 방법이며 모든 최신 브라우저에서 지원합니다. – Serge

답변

4

당신이하고있는 일은 많이 달라집니다. 기술적으로 말하면 header()다소 다소입니다. PHP 사용자 중 상당수가 문제가있어 제대로 작동하지 않기 때문에 약간만 사용하십시오.

출력이 이미 브라우저로 전송 된 경우 PHP가 작동하지 않게합니다. 과감한 예 :

<protected page content here> 
<?php 
    header('Location: login-first.php'); 
    exit(); 
?> 

전혀 작동하지 않습니다. 결국 경고가있는 오류 메시지조차도 보게됩니다.

헤더는 디자인 상 다른 컨텐트 (응답 본문)보다 먼저 발송해야합니다. 응답 본문이 이미 시작된 경우 PHP는 더 이상 보낼 수 없으므로 PHP는이 경우 응답하지 않습니다.

그러나 응답 본문 앞에 머리글을 보내면 해당 기능이 작동합니다. 또한 엉망 뭔가 최대 분명히 위험성도 더 이상 그 과감한되지 않습니다 : 당신이 리디렉션 후 스크립트를 종료하지 않으면

<?php 
    header('Location: login-first.php'); 
    exit(); 
?> 
<protected page content here> 
4

header()을 의지 할 수 있지만 그 후에는 die(), exit() 또는 return을 호출해야합니다. 그렇지 않으면 스크립트가 계속 실행되어 보안 문제가 발생할 수 있습니다.

+0

의문의 여지가 있습니까? – hakre

+0

브라우저에 의해 차단 된 경우에도 'exit()'를 호출하면 스크립트가 중지되므로 보안상의 문제는 없습니다. –

+1

* 특정 * 사전 조건에 대해서만, OP에 많은 코드가 표시되지 않았습니다. http://stackoverflow.com/a/12546392/367456 – hakre

0

브라우저는 header('Location: '); 전달을 무시할 수 있습니다.

그 이유는 브라우저가 전달을 존중하지 않으면 나머지 코드가 실행되지 않도록 항상 head() 호출 이후에 반환해야합니다.

올바른 방법입니다.

0

나머지 페이지를 표시하기 전에 header 명령을 보낸 다음 exit 명령 "exit()"(서버에서 PHP 코드 실행을 중지하기 위해)를 보냅니다. 이 방법을 사용하면 302 리디렉션을 무시하더라도 사용자가 페이지 콘텐츠를 보내지 않습니다.

그리고 네 사용자는 302 리디렉션을 무시할 수 있습니다 :

http://www.webmasterworld.com/html/3604591.htm

+0

감사합니다. 귀하의 답변이 많이 설명되었습니다. 감사! – Andrey

0

header 100 % 신뢰할 수있다.

그러나 header('Location: ../acc/login.php')은 브라우저에서 웹 사이트의 실제 위치로 평가되며 ../acc/login.php는 유효한 URL을 만들지 않습니다!