有PHP会话问题

时间:2011-10-11 11:36:15

标签: php session

在页面加载时获取以下警告消息。我不明白那是什么?

警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已在/ home / heimann /中发送的标头(在/home/heimann/public_html/admin/login.php:9中开始输出)第47行的public_html / admin / login.php

警告:无法修改标题信息 - 已在第52行的/home/heimann/public_html/admin/login.php中发送的标题(由/home/heimann/public_html/admin/login.php:9开始输出)< / p>

php代码

//line 9 <?php 

$admin = 'http://'. $_SERVER['HTTP_HOST'] . '/admin/';

$db = new MySQLi('localhost', 'heimann_admin', '0579ural', 'heimann_content') or die($db->error);

$db->set_charset('utf8');

$username=$db->escape_string($_POST['username']);

$password=$db->escape_string($_POST['password']);

$submit=$db->escape_string($_POST['submit']);



if($username && $password && $submit=='Giriş'){

    $result=$db->query("SELECT id, username, password FROM users WHERE username='$username' AND password='$password'");

    $count=$result->num_rows;

    if($count>0)

    {

        while($row=$result->fetch_object()){

        $dbusername=$row->username;

        $dbpassword=$row->password;

        $dbuserid=$row->id;

        }

        if($username==$dbusername && $password==$dbpassword){

        //line 47 session_start();

        $_SESSION['username']=$dbusername;
        $_SESSION['userid']=$dbuserid;

        //line 52 header('location:'.$admin);

        }

        else message("Şifrə səhvdir");

    }
    else {message("Bazada belə login və şifrə kombinasiyası yoxdur");}

}

else {message("Giriş parametrlərindən biri daxil edilməyib");}
?>


<? 
function message($text){
    global $admin;
    echo '<div class="message">'.$text. '</br><a href="'.$admin.'">Geri</a></div>';
}

?>

3 个答案:

答案 0 :(得分:2)

为避免caching on the clientsession_start函数会向客户端发送一些HTTP标头。但是,在任何HTTP响应中,标头都位于内容之前。当您调用session_start()时,您的脚本已经发送了一些内容,因此它无法再发送标题。

您可以在文件的前面调用session_start(),以便它在任何内容之前发送标头,或者您可以使用output buffering将内容保存在缓冲区中。

答案 1 :(得分:1)

你在session_start之前有一些输出,那是禁止的。如果您无法在session_start之前更改输出,则可以使用ob_start();ob_flush();来缓存输出。

答案 2 :(得分:0)

如果您在PHP代码启动之前已经输出了任何内容,那可能会导致问题,PHP在输出已经开始后调用某些函数时会遇到问题。