2017-04-12 119 views
0

我的代碼有什麼問題?當我運行它時,它會告訴我:「注意:未定義索引:訪問」,位於主體部分if($_COOKIE["visits"] == 1)$numOfVisits = $_COOKIE["visits"];PHP:爲什麼我的cookie沒有正確設置?

<!DOCTYPE html> 

<?php 
if (!isset($_COOKIE["visits"])) 
    setcookie("visits", 1, time()+3600*24*365); 
else{ 
    $visits = $_COOKIE["visits"] + 1; 
    setcookie("visits",$visits, time()+3600*24*365); 
} 
?> 

<html lang="en"> 
    <head> 
     <title>numOfVisits</title> 
     <meta charset="utf-8"/> 
    </head> 
    <body> 
     <?php 
     if($_COOKIE["visits"] == 1) 
      echo("Welcome to my webpage! It is your first time that you are here."); 
     else{ 
      $numOfVisits = $_COOKIE["visits"]; 
      echo("Hello, this is the #$numOfVisits time that you are visiting my webpage."); 
     } 
     ?> 
    </body> 
</html> 
+0

「常見錯誤: 餅乾不會成爲可見,直到一個頁面,該Cookie應該是可見的未來負載測試,如果一個cookie設置成功,檢查。在cookie過期之前的下一個加載頁面上的cookie,過期時間通過expire參數設置,調試cookie存在的一個好方法是簡單地調用print_r($ _ COOKIE);「http://php.net/ manual/en/function.setcookie.php – nogad

回答

1

的問題是,你只能設置cookies或啓動會話任何頭文件是由服務器向客戶端發送之前。 (See documentationsetcookie

setcookie()函數定義要與所述HTTP標頭的其餘部分一起被髮送的cookie。與其他標題一樣,Cookie必須在您的腳本(這是協議限制)的任何輸出之前發送。 這要求您在任何輸出之前調用此函數,包括標記以及任何空格。

這是什麼意思在實踐中是,你不能設置一個cookie後,你已經輸出的東西。在這種情況下,在設置cookie之前,您正在輸出<!doctype html>

解決方案是在輸出任何HTML之前設置Cookie 之前

所以解決方案:

<?php 
if (!isset($_COOKIE["visits"])) 
    setcookie("visits", 1, time()+3600*24*365); 
else{ 
    $visits = $_COOKIE["visits"] + 1; 
    setcookie("visits",$visits, time()+3600*24*365); 
} 
?> 
<!doctype html> 
... 
+0

哦,我明白了。那簡單!謝謝。這是我第一次處理cookies。我確實讀過setcookie需要出現在html標籤之前,但我沒有意識到這包括文檔類型。 –

相關問題