我在运行用户登录脚本后尝试重定向时收到此错误。
它尝试更改此行的标题数据:
header("Refresh: 2; url=index.php");
这是完整的login.php脚本。
<?php
session_start();
require_once('init.php');
$username = trim($_POST['username']);
// create a new object
$login = new Auth($_POST, $dbh);
if($login->validateLogin()){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
$list = $login->getUserInfo();
$_SESSION['id'] = $list['id'];
$_SESSION['thumb'] = $list['img_thumb'];
echo '<div class="content">';
echo '<h1>Thank you for logging in '.$username.'. Redirecting...</h1>';
echo '</div>';
header("Refresh: 2; url=index.php");
}else{
echo '<div class="content">';
echo '<h1>Sorry but we didn\'t recognise those login details, please try again.</h1>';
echo '</div>';
}
require_once('inc/footer.inc.php');
?>
init.php文件调用包含html5 doctype,meta标签等的header.php。
如何在登录后将用户重定向到索引页并像往常一样发送标题信息?
答案 0 :(得分:3)
来自PHP docs。
请记住,在发送任何实际输出之前必须调用
header()
,无论是普通HTML标记,文件中的空行还是PHP。
如果您希望页面在几秒钟后重定向,则需要使用Meta Refresh。
<meta http-equiv="refresh" content="5;URL='http://example.com/'">
答案 1 :(得分:0)
只需在任何header()
语句前移动echo
来电:
<?php
/* ... */
if($login->validateLogin()){
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $username;
$list = $login->getUserInfo();
$_SESSION['id'] = $list['id'];
$_SESSION['thumb'] = $list['img_thumb'];
header("Refresh: 2; url=index.php"); // Put this *before* any output
echo '<div class="content">';
echo '<h1>Thank you for logging in '.$username.'. Redirecting...</h1>';
echo '</div>';
}else{
echo '<div class="content">';
echo '<h1>Sorry but we didn\'t recognise those login details, please try again.</h1>';
echo '</div>';
}
/* ... */
答案 2 :(得分:0)
使用echo然后尝试为Location设置标题将始终引发该错误。 ¿让用户了解重定向而不是重定向可能会更好?如果你想显示这样的消息(如果这种方法有效的话,这种方法不会显示一整秒),你应该使用javascript来更新内容并使用某种延迟......
......但也许这工作太多了。如果您在登录后显示欢迎信息,那就足够了吧? :)