PHP会话启动“无法发送会话cookie和缓存限制器”

时间:2011-09-15 15:02:51

标签: php

我已将托管服务器从Windows更改为Linux系统。但是当我运行我的PHP程序时,我得到了这个错误:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/content/p/y/c/francis/html/login/login.php:2) in /home/content/p/y/c/francis/html/login/login.php on line 4

 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/content/p/y/c/francis/html/login/login.php:2) in /home/content/p/y/c/francis/html/login/login.php on line 4

这是我的程序代码:

<?php

session_start();

$username  = $_POST['username'];
$password  = $_POST['password'];

if ($username && $password)
{

$connect = mysql_connect(***,***,***);
mysql_select_db("phploginregister") or die("Couldn't find db");

$query = mysql_query("SELECT * FROM users WHERE username='$username'");

$numrows = mysql_num_rows($query);

if ($numrows != 0)
{

    while ($row = mysql_fetch_assoc($query))
    {
    $dbusername = $row['username'];
    $dbpassword = $row['password'];
    }

    //check to see if they match!
    if ($username == $dbusername && md5($password) == $dbpassword)
    {
    echo "You're in! <a href='member.php'>Click</a> here to enter the member page.";
    $_SESSION['username'] = $dbusername;    
    }

    else
        echo "Incorrect password";
}
else
    die("That user doens't exist!");

}
else
    die("Please enter an username and password");



?>

代码有什么问题,因为它在Windows主机上很好用......

3 个答案:

答案 0 :(得分:4)

您收到错误是因为在启动session_start()之前有一些输出;这可能是由于您的编辑器在文件开头包含BOM字符而引起的。尝试打开记事本中的代码,看看session_start(),(空格)之类的行之前是否有任何行,并删除它们。

要修改编辑器,如果它在您的文件中添加了一个bom,您需要转到您的设置并将其关闭。

答案 1 :(得分:2)

在开放<?php标记之前,您有一个领先的BOM,新行或其他空白字符。

错误涉及line 2line 4,但在session_start()上调用line 3上面的实际代码。因此,领先的空白就是问题......

答案 2 :(得分:-1)

我认为你应该添加

ob_start();

在代码的第一个

并在底部添加

ob_get_contents(); ob_end_flush();

因为

会话向服务器发送标头,你也添加了echo(这也告诉服务器它的带有标题的html)

服务器现在必须使用标头,因此请使用ob_start();ob_end_flush();工作:)