【问题标题】:PHP Redirect with Custom Headers带有自定义标头的 PHP 重定向
【发布时间】:2023-04-05 07:47:01
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 答案现在应该很清楚了,有四种不同的解释:D

标签: php .htaccess redirect http-headers


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        重定向发送到客户端并由客户端处理,客户端通过导航到给定的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)
        

        【讨论】:

          猜你喜欢
          • 2013-08-04
          • 1970-01-01
          • 1970-01-01
          • 2017-12-28
          • 2011-03-03
          • 2014-02-18
          • 2013-02-12
          • 1970-01-01
          • 2019-09-02
          相关资源
          最近更新 更多