-1

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

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"];
    }

?>

感谢您的回复。

4

1 回答 1

0

“这可能看起来像标准问题,但事实并非如此”。

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

你必须先打电话session_start()。就是这么简单。虽然 PHP 错误和警告有时可能会产生误导,而不是指向确切的问题(只是受问题影响的下一件事)等,但它通常是非常合乎逻辑的,重要的是,“意味着什么!”

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

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

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

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

此外,请确保您的编辑器没有为空格/制表符设置一些奇怪的设置,它可能会添加不需要的字符而不是标准字符。

于 2013-08-25T12:35:20.637 回答