PHP 回声和 headers - 没有输出回声

PHP Echos and headers - Echos not being outputted

我有一个部分,如果 Session 变量用户名不存在,应用程序应该输出一条错误消息,说明需要凭据,然后将用户重定向到登录页面。问题是,只有后者发生, "error message" 没有被输出。

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    echo "<script type='text/javascript'>alert('Not logged in. Please input required credentials.');</script>";
    header('location: /se7en/login.php');
    ob_end_flush();

}
?>

我尝试使用 Output Buffer 来解决这个问题,但是,同样的问题不断发生。请问我该如何解决?

非常感谢!

我同意@khartnett。

由于您正在进行 header 重定向,它会在您有机会显示警告框之前重定向页面。

如果你这样做:

<?php if (!isset($_SESSION['username'])){  
ob_start();
echo "<script type='text/javascript'>" .
          "alert('Not logged in. Please input required credentials.');" .
          "window.location.href = '/se7en/login.php';" .
     "</script>";
header('location: /se7en/login.php');
ob_end_flush();
}
?>

然后,它将显示阻止脚本进一步执行的警告框,直到按下确定,然后继续通过 window.location.href 重定向。

我通常通过将我要重定向到 post 消息的页面来处理这种需求。一种方法是这样的:

<?php if (!isset($_SESSION['username'])){  
    ob_start();
    header('location: /se7en/login.php?message=Not logged in. Please input required credentials.');
    ob_end_flush();

}
?>

然后在你的 login.php 上你会

if ( ! empty( $_GET['message'] ) ) {
    $message = htmlspecialchars( $_GET['message'] );
    echo "<script type='text/javascript'>alert('$message');</script>";
}

您也可以只传递一个消息编号 (message=1),然后将所有可能的消息放入 login.php 文件的数组中:

$messages = array(
    1 => "Not logged.....",
    2 => "something else...",
    //...
);
if( ! empty( $_GET['message'] ) && ! empty( $messages[ $_GET['message'] ] ) {
    echo "<script type='text/javascript'>alert('{$messages[ $_GET['message'] ]}');</script>";
}