无法使登录页面重定向到安全页面

时间:2014-01-06 08:20:10

标签: php function redirect login user-defined-functions

我有一个使用php创建的登录页面,在我正确登录后,我遇到了将其带到管理页面的问题。我知道我使用的登录是正确的,因为我刚创建它,如果它是错的,它应该告诉我。但是,一旦我登录,整个页面就会变成空白,网址显示我仍然在登录页面而不是管理员页面。

我检查了错误日志,它显示“PHP警告:无法修改标题信息 - 已在第4行的/admin/includes/functions.php中通过(输出/admin/login.php:6开始)输出的标题”

这是错误日志所指的代码:

    function redirect_to($new_location) {
    header("Location: " . $new_location);
    exit;
}

我不明白错误指出了什么。在我学习如何创建登录页面和管理页面之前,我已经使用过这个确切的代码,当我测试它然后在我的计算机上使用WAMP时,我没有遇到任何问题。现在我把它放在我网站的服务器上,这个错误就出现了。我不知道从哪里开始排除故障,因为如果我取出该功能,那么它根本不会重定向。任何帮助都会非常感激!!

以下是我用于登录页面的主要代码,如果有帮助的话:

<?php require_once("includes/session.php"); ?>
<?php require_once("includes/db_connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php require_once("includes/validation_functions.php"); ?>

<?php
$username = "";
if (isset($_POST['submit'])) {
// Process the form

// validations
$required_fields = array("username", "password");
validate_presences($required_fields);

if (empty($errors)) {
    // Attempt Login

    $username = $_POST["username"];
    $password = $_POST["password"];

    $found_admin = attempt_login($username, $password);

    if ($found_admin) {
            // Success
            // Mark user as logged in
            $_SESSION["admin_id"] = $found_admin["id"];
            $_SESSION["username"] = $found_admin["username"];
            redirect_to("http://thehummingbirdplace.com/admin/admin.php");
    } else {
            // Failure
            $_SESSION["message"] = "Username/password not found.";
    }
}
} else {
// This is probably a GET request

}   // end: if (isset($_POST['submit']))

?>

<?php $layout_contect = "admin"; ?>
<?php include("includes/layouts/header.php"); ?>
<div id="main">
<div id="navigation">
    &nbsp;
</div>
<div id="page">
    <?php echo message();  ?>
    <?php echo form_errors($errors); ?>

    <h2>Login</h2>
    <form action="login.php" method="post">
        <p>Username:
            <input type="text" name="username" value="<?php echo htmlentities($username); ?>" />
        </p>
        <p>Password:
            <input type="password" name="password" value="" />
        </p>
        <input type="submit" name="submit" value="Submit" />
    </form>
 </div>
</div>

<?php include("includes/layouts/footer.php"); ?>

3 个答案:

答案 0 :(得分:5)

问题是,在将任何输出发送到浏览器之前应该调用头函数。

尝试使用它代替header():

echo '<meta HTTP-EQUIV="REFRESH" content="0; url='.$new_location.'">';

答案 1 :(得分:2)

您的代码正在发送空白行,符合浏览器可呈现文字的条件。

要求在> 任何要呈现的文本之前发送标题信息,并在标题中发送重定向指令。

看看这段代码。

<?php require_once("includes/session.php"); ?>
<?php require_once("includes/db_connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php require_once("includes/validation_functions.php"); ?>

<?php
$username = "";
if (isset($_POST['submit'])) {
// Process the form
  :
{
?>

代码段的第5行有一个空行。您必须删除它才能传递标题。

请注意包含文件中的输出。如果您不确定或无法控制,请在重定向后移动require_once()调用。

答案 2 :(得分:1)

每次关闭php代码时都会传递空行并输入新行,这会导致它被认为是echo的字符串,如果你没有在其余的include文件中回显任何内容,那么这应该可行还建议添加exit();重定向后。

<?php
require_once("includes/session.php"); 
require_once("includes/db_connection.php");
require_once("includes/functions.php");
require_once("includes/validation_functions.php");


$username = "";
if (isset($_POST['submit'])) {
// Process the form

// validations
$required_fields = array("username", "password");
validate_presences($required_fields);

if (empty($errors)) {
    // Attempt Login

    $username = $_POST["username"];
    $password = $_POST["password"];

    $found_admin = attempt_login($username, $password);

    if ($found_admin) {
            // Success
            // Mark user as logged in
            $_SESSION["admin_id"] = $found_admin["id"];
            $_SESSION["username"] = $found_admin["username"];
            redirect_to("http://thehummingbirdplace.com/admin/admin.php");
    } else {
            // Failure
            $_SESSION["message"] = "Username/password not found.";
    }
}
} else {
// This is probably a GET request

}   // end: if (isset($_POST['submit']))


$layout_contect = "admin"; 
include("includes/layouts/header.php");
?>
<div id="main">
<div id="navigation">
    &nbsp;
</div>
<div id="page">
    <?php echo message();  ?>
    <?php echo form_errors($errors); ?>

    <h2>Login</h2>
    <form action="login.php" method="post">
        <p>Username:
            <input type="text" name="username" value="<?php echo htmlentities($username); ?>" />
        </p>
        <p>Password:
            <input type="password" name="password" value="" />
        </p>
        <input type="submit" name="submit" value="Submit" />
    </form>
 </div>
</div>

<?php include("includes/layouts/footer.php"); ?>
相关问题