警告:无法修改 header 信息 - header 已由 [登录表单错误] 发送

Warning: Cannot modify header information - headers already sent by [Error in login form]

我在创建一个没有数据库的登录页面时遇到问题,看起来一切正常,除了当我登录时出现此错误 Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\index.php:25) in C:\AppServ\www\index.php on line 65

我想知道问题是什么?这是一个非常简单的网页,里面有一个登录表单,如果用户名和密码正确,用户应该会看到欢迎消息 + 注销,但由于 header 错误而不会出现。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head lang="en">
 <meta http-equiv="content-type" content="text/html;charset=UTF-8">
 <title>Login To Your Account</title>
 <!-- Framework CSS -->
 <link rel="stylesheet" href="assets/blueprint-css/screen.css" type="text/css" media="screen, projection">
 <link rel="stylesheet" href="assets/blueprint-css/print.css" type="text/css" media="print">
 <!--[if lt IE 8]><link rel="stylesheet" href="assets/blueprint-css/ie.css" type="text/css" media="screen, projection"><![endif]-->
 <link rel="stylesheet" href="assets/blueprint-css/plugins/fancy-type/screen.css" type="text/css" media="screen, projection">
 <style type="text/css" media="screen">
  p, table, hr, .box { margin-bottom:25px; }
  .box p { margin-bottom:10px; }
 
 </style>
</head>



<body>
 <div class="container">
 
  <h3 class="center alt"> Welcome.</h3>
  
  <hr>
<?php

$username = 'username';
$password = 'password';

$random1 = 'secret_key1';
$random2 = 'secret_key2';

$hash = md5($random1.$pass.$random2); 

$self = $_SERVER['REQUEST_URI'];




if(isset($_GET['logout']))
{
 unset($_SESSION['login']);
}




if (isset($_SESSION['login']) && $_SESSION['login'] == $hash) {

 ?>
   
  <p>Hello <?php echo $username; ?>, you have successfully logged in!,</p>
  <a href="?logout=true">Logout</a>
   
 <?php
}


else if (isset($_POST['submit'])) {

 if ($_POST['username'] == $username && $_POST['password'] == $password){
 
  //IF USERNAME AND PASSWORD ARE CORRECT SET THE LOG-IN SESSION
  $_SESSION["login"] = $hash;
  header("Location: $_SERVER[PHP_SELF]");
  
 } else {
  
  display_login_form();
  echo '<p>Username or password is invalid</p>';
  
 }
} 

else { 

 display_login_form();

}


function display_login_form(){ ?>

 <form action="<?php echo $self; ?>" method='post'>
 <label for="username">Username:  </label>
 <input type="text" name="username" id="username">
        <br>
<br>
 <label for="password">Password:  </label>
 <input type="password" name="password" id="password">
<br>
<br>
 <input type="submit" name="submit" value="Submit">
<br>
 </form> 
<?php } ?>


<br>
<hr>
<p>&nbsp;</p>
<p>Copyright © 2015 -</p> 
  
  
  <hr class="space">
 </div><!-- end div .container -->

</body>

请在页面顶部设置会话。

session_start();

使用header()函数前不能有任何输出。

在将任何内容发送到浏览器之前,您需要进行登录检查/重定向。