我有一个部分,如果没有会话变量用户名,应用程序应通过该部分输出一条错误消息,指出需要凭据,然后将用户重定向到登录页面。问题是,只有后者正在发生,并且没有输出“错误消息”。
<?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 来解决此问题,但是,同一问题不断发生。请问该如何解决?
非常感谢!
答案 0 :(得分:0)
我同意@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
重定向。
答案 1 :(得分:0)
我通常通过让我重定向的页面发布消息来满足此需求。一种方法是:
<?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>";
}