2011-10-11 110 views
0

在頁面加載時獲取以下警告消息。我不明白那是什麼?發生PHP會話問題

警告:session_start()[function.session-start]:無法發送會話緩存限制器 - 已在/ home/heimann中發送的頭文件(輸出開始於/home/heimann/public_html/admin/login.php:9) /public_html/admin/login.php on line 47

警告:無法修改標頭信息 -/home/heimann中已經由(home /heimann/public_html/admin/login.php:9開始處的輸出)發送的標頭信息/public_html/admin/login.php線路52上

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

你的php代碼從第9行開始,你的會話在#47。我會將Session_start置於頂部,並且頭部(位置)應該在任何輸出發送 – Lixas

回答

1

你在session_start之前有一些輸出,那就是禁止的。如果在session_start之前無法更改輸出,則可以使用ob_start();ob_flush();來緩存輸出。

+0

之前,因爲可以在您的示例中看到,您的php代碼從第9行開始。我們可以猜測上面的內容直接發送到瀏覽器(html) – mishu

+0

我附上了我的php文件。請看看究竟有什麼錯誤? –

+0

是的,有5-6行o HTML標記 –

2

要避免caching on the clientsession_start函數會向客戶端發送一些HTTP標頭。但是,在任何HTTP響應中,標題都會出現在內容之前。當你調用session_start()時,你的腳本已經發送了一些內容,所以它不能再發送標題。

您可以在文件的早期調用session_start(),以便它在任何內容之前發送標題,或者您可以使用output buffering將內容保留在緩衝區中。

0

如果您在PHP代碼啓動之前已經輸出了任何東西,那可能是導致問題的原因,PHP在輸出啓動後會調用某些函數。

+0

是有5-6行的HTML標記。是否導致問題? –

+0

最有可能的情況是,在任何輸出開始之前,嘗試將處理使用會話函數的所有PHP代碼移動到腳本的頂部。 – Nexerus