在页面加载时获取以下警告消息。我不明白那是什么?
警告: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>';
}
?>
答案 0 :(得分:2)
为避免caching on the client,session_start函数会向客户端发送一些HTTP标头。但是,在任何HTTP响应中,标头都位于内容之前。当您调用session_start()时,您的脚本已经发送了一些内容,因此它无法再发送标题。
您可以在文件的前面调用session_start(),以便它在任何内容之前发送标头,或者您可以使用output buffering将内容保存在缓冲区中。
答案 1 :(得分:1)
你在session_start
之前有一些输出,那是禁止的。如果您无法在session_start之前更改输出,则可以使用ob_start();
和ob_flush();
来缓存输出。
答案 2 :(得分:0)
如果您在PHP代码启动之前已经输出了任何内容,那可能会导致问题,PHP在输出已经开始后调用某些函数时会遇到问题。