Php Session头已发送错误

时间:2011-06-21 21:02:51

标签: php session header

  

可能重复:
  php headers already sent error

我附上了我的代码,用于在php中进行非常基本的登录。它给出了一个错误

  

无法发送会话Cookie - 标头   已发送(输出开始于   C:\ XAMPP \ htdocs中\ netsentries \˚F\包括\的functions.php:1)

   <?php 
    if (!isset($_POST['username'])) {
    ?>
    <h3>Login</h3>
    <form action="" method="post">
    Username<br/>
    <input name="username" type="text" /><br/>
    Password<br/>
    <input name="password" type="password" /><br/>
    <input name="" type="submit" /><br/>
    </form>
    <?php
    }
     else 
    { 
    include('includes/config.php');

    $data['username']= $_POST['username'];
    $data['password']= md5($_POST['password']);

    connect($db_name,$db_user,$db_pass,$db_host);

    $query= "select * from user where username='" . $data['username'] . "' AND password='" . $data['password'] . "'";

        $result=mysql_query($query);
        //check that at least one row was returned
        $rowCheck = mysql_num_rows($result);
        if($rowCheck > 0)
        {
        while($row = mysql_fetch_array($result))
            {
            session_start();
            session_register($data['username']);
            //successful login code will go here...
            //echo 'Logged in!'; 
            }
        }
        else
        {
        echo "Failed!";
        }



    }
    ?>

无法找出问题

6 个答案:

答案 0 :(得分:3)

在您输出任何HTML后,您无法session_start。将session_start调用移到顶部,并保留一个变量,以便稍后回显。任何不在<?php ?>内的内容,甚至包括你的包含文件。

答案 1 :(得分:2)

您需要在页面上的任何输出之前放置session_start()。

 <?php
session_start(); 
if (!isset($_POST['username'])) {
?>
<h3>Login</h3>
<form action="" method="post">
Username<br/>
<input name="username" type="text" /><br/>
Password<br/>
<input name="password" type="password" /><br/>
<input name="" type="submit" /><br/>
</form>
<?php
}
 else 
{ 
include('includes/config.php');

$data['username']= $_POST['username'];
$data['password']= md5($_POST['password']);

connect($db_name,$db_user,$db_pass,$db_host);

$query= "select * from user where username='" . $data['username'] . "' AND password='" . $data['password'] . "'";

    $result=mysql_query($query);
    //check that at least one row was returned
    $rowCheck = mysql_num_rows($result);
    if($rowCheck > 0)
    {
    while($row = mysql_fetch_array($result))
        {
        session_register($data['username']);
        //successful login code will go here...
        //echo 'Logged in!'; 
        }
    }
    else
    {
    echo "Failed!";
    }



}
?>

答案 2 :(得分:2)

如果您尝试使用任何修改标题的函数(例如headersession_start),您需要确保事先输出,即使是空格 - 否则你会得到那个错误。

答案 3 :(得分:2)

中途你有

session_start();

但在此之前你不想要任何输出。而且你至少已经发送了这个:

   <h3>Login</h3>
    <form action="" method="post">
    Username<br/>
    <input name="username" type="text" /><br/>
    Password<br/>
    <input name="password" type="password" /><br/>
    <input name="" type="submit" /><br/>
    </form>

将会话置于顶部:D ​​

答案 4 :(得分:1)

include('includes/config.php');

在该文件中查找空格。

特别是在?&gt;之后在文件的末尾通常有空格。

所以省略关闭?&gt;在文件的末尾。

答案 5 :(得分:0)

确保在会话呼叫之前绝对没有输出任何内容 - 即使是空格。 (见Pekka的评论:))