我已经创建了登录页面和登录页面。登录页面的PHP代码是:
<?php
session_start();
include 'functions.php';
if(isValid()){
header('Location: logged.php');
exit;
}
?>
并且记录页面的代码是:
<?php
session_start();
include 'functions.php';
if(!isValid()){
header('Location: login.php');
exit;
}
?>
此代码之前没有任何内容。在代码之后,login.php页面中有登录表单,以及logged.php页面中的一些信息。
isValid()函数是正确的,因为我已经使用isvalid.php页面测试了它,当用户正确记录时返回1,如果没有用户登录或者会话中保存的信息错误,则返回0。 / p>
如果我使用login.php页面中的表单登录,我可以在logged.php页面中看到所有信息。如果我尝试返回login.php,我将被重定向到logged.php。
如果我没有登录并且我尝试访问logged.php,则输出是一个空白页面,没有任何重定向到login.php页面。 PHP应该将我重定向到登录页面!
我在另一个讨论中看到过建议调试是否有一个带有headers_sent()函数的输出。
当我输入像这样的调试代码时
<?php
if(headers_sent())
echo "TRUE";
在第一行中,它在记录的页面中返回TRUE,在登录页面中没有任何内容。
有什么问题?
答案 0 :(得分:0)
详细阐述Fraceskix评论:
脚本中标记之外的任何内容都被视为输出,因此会导致标题被发送。
此外,一些文本编辑器会自动在末尾添加换行符。例如,vim按outlined here的方式执行此操作。这意味着如果你有一个包含关闭php标记的包含文件,它可能正在发送内容,因此也就是标题。
最简单的方法是不要在只包含php的文件中关闭你的php标签。事实上,这是part of the psr-2 standard for this reason。