【问题标题】:Cannot send session cookie - headers already sent by [duplicate]无法发送会话 cookie - [重复] 已发送的标头
【发布时间】:2013-06-12 18:21:07
【问题描述】:

我知道这已经发布过很多次了,但我仍然遇到问题。

当我登录我的网站时,我希望开始一个会话。当我开始会话时,我得到了这个错误。

警告:session_start() [function.session-start]:无法发送会话 cookie - 已发送的标头(输出开始于 /home1/gretar/public_html/login.php:27) 在 /home1/gretar/public_html/login.php 第 30 行

警告:session_start() [function.session-start]:无法发送会话 缓存限制器 - 标头已发送(输出开始于 /home1/gretar/public_html/login.php:27) 在 /home1/gretar/public_html/login.php 第 30 行

这就是我的代码的样子

<?php
include('mysql_connect.php');

if($_SERVER['REQUEST_METHOD'] == 'POST') {

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


$query = "SELECT * FROM members WHERE username='$username' AND password='$password'";
mysql_query("SELECT verified FROM members WHERE username='$username'");

$sql = mysql_query("SELECT verified FROM members WHERE username='$username'");
while($row = mysql_fetch_array($sql)){

$verified = $row["verified"];   
};
$result = mysql_query($query);
$query_rows = mysql_num_rows($result);


if($query_rows > 0) {
    if($verified == 1) {
    echo("User Verified");
    } else if($verified == 0) {
    echo("User not verified");
    }
        echo ("Succesfull login!");
session_start();
$_SESSION['login'] = "1";

    }else{
echo("Bad login!");
    }
}
?>
<html>
    <head> 
    <title>Login</title>
    </head>
        <body>
        <form action="login.php" method="post"/>
        Username: <input type="text" name="username"/><br>
        Password <input type="password" name="password"/> <br>
        <input type ="submit" value="Login!"/>

        </body>
</html>

This answer真的帮助了我。

【问题讨论】:

    标签: php mysql session-cookies


    【解决方案1】:

    问题出在这部分:

    echo("User Verified");
    } else if($verified == 0) {
    echo("User not verified");
    

    如果您想更改 HTTP 标头(您在做什么,当您开始会话时),您不能回显任何内容。

    为什么不在文件的开头调用 session_start() 呢?

    还请注意,您执行相同的 mysql_query 两次。

    【讨论】:

      【解决方案2】:

      除了在您回显的第一件事之前设置 cookie 和其他标头之外,您还可以使用输出缓冲区。输出缓冲区将允许您在打印之前缓冲输出,从而允许 php 正确指定顺序。在 HTTP 协议中,标头首先出现,然后是两个回车符,然后是您的内容。

      http://php.net/manual/en/function.ob-start.php/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-15
        • 2014-06-09
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        相关资源
        最近更新 更多