PHP session_start() - 难以理解的错误

时间:2013-08-25 12:11:05

标签: php session

这可能看起来像标准问题,但事实并非如此。 我收到了这个错误:

  

session_start()[function.session-start]:无法发送会话缓存限制器

....这就是我无法理解的,因为session_start()是文件中写的第一件事(<?php除外)。 这是代码:

<?php

    session_start();

    include "config.php";

    $escapedName = mysql_real_escape_string($_GET['email']);
    $escapedPW = mysql_real_escape_string($_GET['password']);

    $query ="SELECT salt FROM users WHERE email='".$escapedName."'";
    $result = mysql_query($query, $link) or die ("SQL dotaz sa nepodaril");
    $num = mysql_num_rows($result);

    while ($row=mysql_fetch_array($result)){
        $salt = $row["salt"];
    }

    $saltedPW =  $escapedPW . $salt;
    $hashedPW = hash('sha256', $saltedPW);

    //echo $hashedPW."<br>";

    $query ="SELECT ESN_WINGS_ID as id FROM users WHERE email='".$escapedName."' AND password='".$hashedPW."'";
    $result = mysql_query($query, $link) or die ("SQL dotaz sa nepodaril");
    $num = mysql_num_rows($result);

    if($num == 0)
        echo "Invalid e-mail or password";

    while ($row=mysql_fetch_array($result)){
        $_SESSION["id"] = $row["id"];
        echo $SESSION["id"]."NOT WORKING!";
        //echo $row["id"];
    }

?>

感谢您的回复。

1 个答案:

答案 0 :(得分:0)

“这可能看起来像标准问题,但它不是”。

大多数时候,当人们这么说时,他们只是说这是一个标准问题,因为他们无法从阅读别人的解决方案到“标准”问题找到问题。 (我去过那里)

你必须先调用session_start()。就这么简单。虽然PHP错误和警告有时会产生误导,但没有指出确切的问题(只是下一个受问题影响的事情)等等,它通常很合乎逻辑,而且重要的是,“意味着说的是什么!”

如果它告诉您已发送的标头,则已发送标头。空格或回程车(虽然这通常不足以引起问题),一些文字等等。

我尝试复制/粘贴您的代码,并使用session_start()的顶部部分,它对我来说很好。所以我想你可能有带BOM的UTF-8(我没有BOM)。

确保<?php之前或之后没有空格,并且它位于文件的最顶部,并确保session_start()正好位于<?php下方确保它们之间没有空格或额外的回程车厢,然后进行测试。

如果仍然失败,请查看http://en.wikipedia.org/wiki/Byte_order_mark。如果您的编辑器设置为使用BOM进行编码,请尝试将其设置为不使用BOM进行编码。

另外,请确保您的编辑器没有空间/选项卡的奇怪设置,它可能会添加不需要的字符而不是标准字符。