【问题标题】:Cannot send session cookie - headers already sent(when session_start()) [duplicate]无法发送会话 cookie - 标头已发送(当 session_start() 时)[重复]
【发布时间】:2014-11-22 12:39:52
【问题描述】:

我尝试加载登录页面,但出现两个错误:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at Z:\home\lab4\www\login.php:18) in Z:\home\lab4\www\login.php on line 19

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\lab4\www\login.php:18) in Z:\home\lab4\www\login.php on line 19

第 19 行是session_start();。我试图删除浏览器中的所有 cookie,但没有帮助。有什么想法吗?

<body>
    <?php
        session_start();
        if(isset($_POST["enter"]))
        {                
            $login = $_POST["login"];
            $password = $_POST["password"];
            $query = mysql_query("SELECT * FROM users WHERE password = '$password' AND login = '$login'") or die(mysql_error());
            $user_data = mysql_fetch_array($query);
            if($user_data)
            {                                                       
                $_SESSION["login"] = $user_data["login"];
                $_SESSION["loggedin"] = true;
            }
            else print('<script>alert("Incorrect login or password!")</script>');
        }

【问题讨论】:

标签: php cookies


【解决方案1】:

session_start() 必须在所有输出之前,在此之前移动您的 PHP 代码。

<?php

session_start();

if (isset($_POST["enter"])) {                
    $login = $_POST["login"];
    $password = $_POST["password"];
    $query = mysql_query("SELECT * FROM users WHERE password = '$password' AND login = '$login'") or die(mysql_error());
    $user_data = mysql_fetch_array($query);

    if ($user_data) {
        $_SESSION["login"] = $user_data["login"];
        $_SESSION["loggedin"] = true;
    }
    else print('<script>alert("Incorrect login or password!")</script>');
}

// another PHP code

?>

<body>
    ...

【讨论】:

  • 没有帮助。错误是一样的
  • 第 19 行在哪里?在您的问题代码中,我没有看到 COOKIES。
  • session_start();是第 19 行
  • 那么你上面还有另一个 HTML 代码(head 等)? Everythink 向下移动,在 PHP 代码下,或者至少在 session_start 下。
【解决方案2】:

我认为该代码会起作用

<?php

session_start();

if (isset($_POST["enter"])) {                
    $login = $_POST["login"];
    $password = $_POST["password"];
    $query = mysql_query("SELECT * FROM users WHERE password = '$password' AND login = '$login'") or die(mysql_error());
    $user_data = mysql_fetch_array($query);

    if ($user_data) {
        $_SESSION["login"] = $user_data["login"];
        $_SESSION["loggedin"] = true;
        $tpl_body='You are in';


    }
    else $tpl_body='<script>alert("Incorrect login or password!")</script>';
}

// another PHP code

?>

<body>


<?php

echo $tpl_body;

?>

</body>

【讨论】:

    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 2013-06-12
    • 2017-08-29
    • 1970-01-01
    • 2019-09-25
    • 2013-05-15
    • 1970-01-01
    • 2014-06-09
    相关资源
    最近更新 更多