4

我正在编写一个基本的授权系统,但我有点挣扎。涉及两个文件 -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.php,我正在使用headers_list(),但我发送的标头不在列表中。

是什么原因造成的?我已经php_value "output_buffering" "0".htaccess文件中尝试过,但没有成功。

更新 在 Chrome 中检查后,浏览器正在接收标头,但在 PHP 中不可用。

提前致谢。

4

4 回答 4

3

您指定的 headers()header()将出现在服务器 -> 客户端的输出中。但是,在进行重定向时,浏览器将执行一个NEW请求,客户端 -> 服务器,并且浏览器没有义务在这个新请求中包含您的自定义标头。

于 2012-04-10T18:55:57.503 回答
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)
于 2012-04-10T18:57:28.800 回答
1

我正在向包含表单的脚本发送自定义标题

不你不是。您向客户端(用户的浏览器)发送自定义标头,客户端将简单地忽略/丢弃它。

如果您需要维护状态,请使用 cookie/会话或在新位置放置一些东西,例如header('Location: index.php?login=false');.

于 2012-04-10T18:55:32.910 回答
1

正在接收您发送给用户的自定义标头。但是当浏览器执行重定向时它们被丢弃,因为浏览器没有将它们发送到重定向页面。这就是为什么你看不到他们。

于 2012-04-10T18:56:51.460 回答