我正在写一个基本的授权系统,我正在努力解决它。涉及两个文件 - index.php
和login.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中不可用。
提前致谢。
答案 0 :(得分:3)
您使用header()
指定的标头()将出现在服务器的输出中 - &gt;客户。但是,在进行重定向时,浏览器会执行新请求,客户端 - &gt;服务器,浏览器没有义务在此新请求中包含您的自定义标头。
答案 1 :(得分: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)
答案 2 :(得分:1)
我正在向包含表单
的脚本发送自定义标头
不,你不是。您向客户端(用户的浏览器)发送自定义标头,客户端将忽略/丢弃它。
如果您需要维护状态,请使用Cookie /会话或在新位置放置内容,例如header('Location: index.php?login=false');
。
答案 3 :(得分:1)
正在接收您要发送给用户的自定义标头。但是当浏览器进行重定向时,它们会被丢弃,因为浏览器没有将它们发送到重定向页面。这就是你没有看到它们的原因。