2012-05-11 105 views
0

我有一個網站,其中包含登錄和用戶登錄時我希望它顯示主頁上的消息以及進行會話通過。PHP會話未知錯誤

我收到的錯誤:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by.. 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 

當我不在它記錄顯示錯誤,但只要我登錄並返回該頁面消失,但不顯示「您已登錄!」像它應該...

這裏是我的驗證代碼它檢查匹配數據庫後:

if ($result["userName"] == $_POST[txtUsername] && $result["password"] ==$_POST[txtPassword]) 
    { 
     ?> 
     <script type="text/javascript">; 
     alert("successfully logged in, <?php echo $result['userName'];?>!"); 
     window.location.href='http://manning3.jcu.edu.au/~jc192699/index.html'; 
     </script> 
     <?php 
     session_start(); 
     $_SESSION["access"] = 'granted'; 
    } 

而我在我的index.php代碼,似乎會導致錯誤:

<?php 
    session_start(); 
    if ($_SESSION["access"] == 'granted'){ 
     ?> 
     <p>You are logged in!</p> 
     <?php 
    } 
    else{ 
    ?> 
    <p>You are not logged in!</p> 
    <?php 
    } 
    ?> 

任何幫助將非常感激。謝謝!

+0

在你的代碼的某個地方,在你調用'session_start'之前,一個鬆散的空間(通常在一個文件的末尾)會導致輸出觸發。檢查右列中的無數相關問題以尋找更多地方... – rjz

+0

無論您使用會話做什麼,session_start()都必須是您要做的第一件事。 – thetrompf

+0

謝謝你的幫助!錯誤現在消失了,但我仍然有問題...登錄並返回索引頁後,系統不顯示「您已登錄!」。任何線索? – DommyCastles

回答

2

session_start()必須在任何輸出打印到瀏覽器之前調用。由於在開始會話之前打印了JavaScript腳本,因此頭文件已被設置,因此會話無法啓動。

+0

謝謝你的幫助!錯誤現在消失了,但我仍然有問題...登錄並返回索引頁後,系統不顯示「您已登錄!」。任何線索? – DommyCastles

+0

Cookie非常適合登錄。只需存儲一個包含用戶是否登錄的cookie,並在其上設置過期日期即可。然後,對於您的註銷,您將通過將其到期日期設置爲過去的日期來使該cookie過期。另外,在附註中,您應該在提問時接受您接受的答案;這樣做可以讓其他用戶知道您是如何解決您遇到的問題的。 – Vulcan

+0

關於如何去做這件事的任何想法? – DommyCastles

1

看起來您在第1行的<?php聲明之前有一個空格。這會導致在session_start()之前發送標題,並可能導致您收到的錯誤。