2011-07-27 76 views
1

test.php的解封餅乾越來越未定義指數

<?php 
setcookie('username', 'mary', time()+1000); 


setcookie('username', 'mary', time()-1000); 


?> 

view.php

<?php 
echo $_COOKIE['username']; 


?> 

錯誤我你重置餅乾

通知後獲得:未定義指數:用戶名在C:\用戶\ joe \ Documents \ Discrete Math \ xampp \ htdocs \ view.php on line 3

+3

這就是你應該得到的,不是嗎?畢竟,你正在設定它。 [看?](http://www.ideone.com/MOdZo) –

回答

0

取消設置cookie,它就像一個變量,它不再存在。 是列表。

$a = 1; 
$a = null; 

print $a; 
-1

我會說,按照設計工作。要禁用這類警告,使用方法:

ini_set('display_errors', 0); 

或者

ini_set('display_errors', 1); 
error_reporting(E_ALL ~ E_WARN); // or some other (combination of) flag(s). 
+1

這真的是一個不好的解決方案。他應該學會避免犯錯或產生良好的代碼。這只是僞裝 – worenga

+0

同意。僅僅因爲他們不是致命的錯誤並不意味着他們應該保持鎮壓和不予理會。 –

+0

在Tim的辯護中,雖然您應該檢查數組索引是否已定義,但在實時服務器上,建議不要顯示錯誤,警告或通知。抑制錯誤並不總是好事(特別是使用@),但是在一個活箱上我會說它很好。 –

0

如果取消設置的cookie,該cookie消失了,因此$ _COOKIE數組不會有它的這個特定的Cookie關鍵了。

在實際使用密鑰之前,您可能需要檢查密鑰是否存在。 您可以通過使用函數array_key_exists(http://php.net/array_key_exists

0

setcookie()這樣做並不總是意味着您要將cookie設置爲某個值。它只是告訴PHP將Cookie頭中的cookie條目更新回UserAgent。如果代理看到過期時間(setcookie()中的最後一個參數)已過,則會假定Cookie已過期並將其刪除。 Ergo,cookie將被刪除。嘗試訪問數組中的無效鍵將始終在PHP中生成通知。你應該修復它,如果你可以用isset()但在生產箱中,你可以簡單地隱藏錯誤/警告/通知或將它們記錄到私人文件。