2012-04-10 5 views
4

나는 기본적인 인증 시스템을 작성 중이며 조금 어려움을 겪고 있습니다. 두 파일 - index.phplogin.php이 있습니다. 로그인 양식은 (는 내부 index.php있어) 매우 간단하다 : 사용자 지정 헤더로 PHP 리디렉션

<fieldset class="right"> 
    <label for="email">Email 

     <input id="email" name="email" type="text" value=""/> 
    </label> 
    <label for="password">Password 
     <input id="password" name="password" type="password" /> 
     <a href="#" onclick="$('#password-box').toggle();" >Forgot your password?<span></span></a> 
    </label> 
    <div class="btn-login"><button type="submit" value="Login"></button></div> 
</fieldset> 
</form> 

login.php 내용 :

<?php 
// Include the launcher file. 
require_once('globals.php'); 
require_once(CORE . 'launcher.php'); 

// Collect the information sent to us. 
$mail = (isset($_POST['email'])) ? $_POST['email'] : ''; 
$password = (isset($_POST['password'])) ? $_POST['password'] : ''; 

$LoginError = false; 
    // AUTHORIZATION STUFF HERE 
if ($LoginError) { 
    header('Status: 200'); 
    header('X-Test: test'); 
    header('Location: index.php'); 
    exit(); 
} 

당신이 볼 수 있듯이, 나는 형태를 포함하는 스크립트에 사용자 정의 헤더를 보낸다 의 경우 로그인하는 중에 오류가 발생했습니다. index.php에서 headers_list()을 사용하고 있지만 보내시는 헤더가 목록에 없습니다.

그 원인은 무엇입니까? .htaccess 파일에서 php_value "output_buffering" "0"으로 시도했지만 성공하지는 못했습니다.

업데이트 Chrome을 체크인 한 후 헤더가 브라우저에 수신되었지만 PHP에서는 사용할 수 없습니다.

미리 감사드립니다.

+0

답은 네 가지 설명이 명확해야합니다. D –

+0

업데이트를 참조하십시오. – Pateman

답변

3

리디렉션은 지정된 Location: index.php으로 이동하여 응답하는 클라이언트에 보내지고 처리됩니다. 서버에서 index.php을 요청할 때 브라우저가 사용자 정의 헤더를 제공한다고 예상해서는 안됩니다.

CLIENT         SERVER 
|------- POST login.php ------------------>| 
|           | 
|<- 200, Location: index.php, X-Test:test -| (this is where you send the header) 
|           | 
|------- GET index.php ------------------->| (no header from client to server) 
1

나는 형태

아니 당신은 아니에요을 포함하는 스크립트에 사용자 정의 헤더를 보내고있다. 클라이언트 (사용자의 브라우저)에 사용자 정의 헤더를 보내면 클라이언트는 무시하거나 무시합니다.

상태를 유지해야하는 경우 쿠키/세션을 사용하거나 새로운 위치에 무언가를 넣으십시오 (예 : header('Location: index.php?login=false');).

3

header()으로 지정한 헤더()는 server -> client의 출력에 있습니다. 그러나 리디렉션을 수행 할 때 브라우저는 NEW 요청 인 클라이언트 -> 서버를 수행하며 브라우저는이 새로운 요청에 사용자 정의 헤더를 포함시킬 의무가 없습니다.

1

사용자에게 보내는 사용자 지정 헤더가 수신되고 있습니다. 그러나 브라우저가 리디렉션 된 페이지로 리디렉션을 보내지 않아 리디렉션을 수행 할 때 브라우저가 삭제됩니다. 그래서 당신이 그들을 보지 못합니다.

관련 문제