4

私は基本的な認証システムを書いていますが、少し苦労しています。関連する 2 つのファイルがあります -index.phplogin.php. ログイン フォームは非常にシンプルです (内部にありますindex.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.phpheaders_list()ています。

何が原因ですか?ファイルで試しましphp_value "output_buffering" "0".htaccessが、成功しませんでした。

更新 Chrome でチェックインした後、ヘッダーはブラウザーで受信されていますが、PHP では使用できません。

前もって感謝します。

4

4 に答える 4

3

リダイレクトは、指定されたに移動して応答するクライアントに送信され、処理されますLocation: index.phpindex.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)
于 2012-04-10T18:57:28.800 に答える
3

指定した headers() はheader()、サーバー -> クライアントからの出力に存在します。ただし、リダイレクトを行う場合、ブラウザーはクライアント -> サーバーという新しい要求を実行します。ブラウザーは、この新しい要求にカスタム ヘッダーを含める義務はありません。

于 2012-04-10T18:55:57.503 に答える
1

ユーザーに送信しているカスタムヘッダーが受信されています。ただし、ブラウザがリダイレクトされたページに送信していないため、ブラウザがリダイレクトを実行すると破棄されます。それがあなたがそれらを見ない理由です。

于 2012-04-10T18:56:51.460 に答える
1

フォームを含むスクリプトにカスタム ヘッダーを送信しています

いいえ、そうではありません。カスタム ヘッダーをクライアント (ユーザーのブラウザー) に送信すると、クライアントは単にそれを無視/破棄します。

状態を維持する必要がある場合は、Cookie/セッションを使用するか、新しい場所に何かを配置しますheader('Location: index.php?login=false');

于 2012-04-10T18:55:32.910 に答える