This question already has answers here:
How to fix “Headers already sent” error in PHP
                                
                                    (11个答案)
                                
                        
                                3年前关闭。
            
                    
我使用的是相当简单的php脚本(login.php),让用户登录受保护的页面。但是,我不断收到这些错误消息

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/sites/f/mysite.co.uk/public_html/users/login.php:15) in /var/sites/f/mysite.co.uk/public_html/users/login.php on line 36

Warning: Cannot modify header information - headers already sent by (output started at /var/sites/f/freedomprogramme.co.uk/public_html/users/login.php:15) in /var/sites/f/freedomprogramme.co.uk/public_html/users/login.php on line 39


并且该页面不会重定向到“欢迎”页面,该页面的顶部

<?php
session_start();
if(!isset($_SESSION["sess_user"])){
header("Location: login.php");
}
else
{
?>


这是login.php的内容

<!doctype html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form action="" method="post">
<label>Username:</label><input type="text" name="user"><br/>
<label>Password:</label><input type="password" name="pass"><br/>
<input type="submit" value="Login" name="submit"><br/>
<!--New user Register Link -->
<p><a href="register.php">New User Registration!</a></p>
</form>
<?php
if(isset($_POST["submit"])){
if(!empty($_POST['user']) && !empty($_POST['pass'])){
$user = $_POST['user'];
$pass = $_POST['pass'];
//DB Connection
$conn = new mysqli('xxxx', 'yyyy', 'zzzz') or die(mysqli_error());
//Select DB From database
$db = mysqli_select_db($conn, 'yyyy') or die("databse error");
//Selecting database
$query = mysqli_query($conn, "SELECT * FROM userpass WHERE user='".$user." AND pass='".$pass."'");
$numrows = mysqli_num_rows($query);
if($numrows !=0)
{
while($row = mysqli_fetch_assoc($query))
{
$dbusername=$row['user'];
$dbpassword=$row['pass'];
}
if($user == $dbusername && $pass == $dbpassword)
{
session_start();
$_SESSION['sess_user']=$user;
//Redirect Browser
header("Location:welcome.php");
}
}
else
{
echo "Invalid Username or Password!";
}
}
else
{
echo "Required All fields!";
}
}
?>
</body>
</html>


任何帮助表示赞赏。提前致谢

最佳答案

你需要搬家

<?phpif(isset($_POST["submit"])){.........}?>

在页面顶部的<!doctype html>之前。

原因是HTTP响应的标头必须始终在正文之前。但是在您的代码中,正文(HTML)在发送标头(session_start()header())的函数之前

08-27 20:39
查看更多