2012-04-10 16 views
4

Ich schreibe ein grundlegendes Autorisierungssystem und ich kämpfe mit ihm ein bisschen. Es sind zwei Dateien beteiligt - index.php und login.php. Das Anmeldeformular ist ziemlich einfach (es ist innen index.php): PHP Redirect mit benutzerdefinierten Kopfzeilen

<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> 

Die login.php Inhalt:

<?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(); 
} 

Wie Sie sehen können, bin ich einen benutzerdefinierten Header, um das Skript zu senden, welche die Form in Fall gab es einen Fehler beim Anmelden. In der index.php, verwende ich headers_list(), aber die Header, die ich sende, ist nicht in der Liste vorhanden.

Was verursacht das? Ich habe versucht mit php_value "output_buffering" "0" in der .htaccess Datei, aber keinen Erfolg.

UPDATE Nach dem Einchecken in Chrome wird die Kopfzeile vom Browser empfangen, ist aber in PHP nicht verfügbar.

Vielen Dank im Voraus.

+0

Die Antwort sollte jetzt mit vier verschiedenen Erklärungen klar sein: D –

+0

Bitte beachten Sie das Update. – Pateman

Antwort

3

Die Weiterleitung wird an den Client gesendet und von diesem verarbeitet. Dieser antwortet, indem er zur angegebenen Location: index.php navigiert. Sie sollten nicht erwarten, dass der benutzerdefinierte Header vom Browser bereitgestellt wird, wenn er index.php vom Server anfordert.

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

Ich schicke einen benutzerdefinierten Header an das Skript Kein

Sie nicht das Formular enthält. Wenn Sie einen benutzerdefinierten Header an den Client (den Browser des Benutzers) und den Client senden, wird dieser einfach ignoriert/verwerfen.

Wenn Sie den Status beibehalten möchten, verwenden Sie einen Cookie/Sitzungen oder platzieren Sie etwas an der neuen Position, z. B. header('Location: index.php?login=false');.

3

Die Kopfzeilen(), die Sie mit header() angeben, sind in der Ausgabe von Server -> Client enthalten. Bei einer Umleitung führt der Browser jedoch eine NEW Anfrage Client -> Server aus, und der Browser ist nicht verpflichtet, Ihre benutzerdefinierten Header in diese neue Anfrage aufzunehmen.

1

Die benutzerdefinierten Header, die Sie an den Benutzer senden, werden empfangen. Sie werden jedoch verworfen, wenn der Browser die Weiterleitung durchführt, da der Browser sie nicht an die umgeleitete Seite sendet. Deshalb siehst du sie nicht.