我有一个部分,如果没有使用会话变量用户名,应用程序应输出一条错误消息,指出需要凭据,然后将用户重定向到登录页面。问题是,只有后者发生,并且没有输出“错误消息”。
<?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();
}
?>
我尝试使用输出缓冲区来解决这个问题,然而,同样的问题不断发生。我该如何解决这个问题?
非常感谢!
我通常通过让我重定向的页面来发布消息来处理这种需求。一种方法是:
<?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>";
}
我同意@khartnett。
由于您正在进行标题重定向,因此在您有机会显示警告框之前,它将重定向页面。
如果你这样做:
<?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();
}
?>
然后,它将显示警告框,阻止进一步执行脚本,直到按下OK,然后继续通过window.location.href
重定向。