удаление cookie с получением неопределенного индекса - PullRequest
1 голос
/ 27 июля 2011

test.php

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


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


 ?>

view.php

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


?>

Ошибка, которую я получаю после удаления cookie

Примечание: неопределенный индекс: имя пользователя в C: \ Users \ joe \ Documents \ Discrete Math \ xampp \ htdocs \ view.php в строке 3

Ответы [ 5 ]

2 голосов
/ 27 июля 2011

Вы определяете куки только для того, чтобы немедленно сбросить его. Вызов setcookie на имя пользователя с отрицательным временем равен , по сути, вызов unset($_COOKIE['username']) (следовательно, индекс в суперглобальном файле cookie больше не существует, и поэтому неопределенная ошибка).

Я называю это ожидаемым поведением .

0 голосов
/ 27 июля 2011

setcookie() не всегда означает, что вы устанавливаете cookie на определенное значение.Он просто говорит PHP обновить эту запись cookie в заголовке Cookies, отправленную обратно в UserAgent.Если агент увидит, что время истечения (последний параметр в setcookie()) прошло, он будет считать, что срок действия файла cookie истек, и удалит его.Ergo, печенье будет удалено.Попытка получить доступ к неверному ключу из массива всегда будет генерировать уведомление в PHP.Вы должны исправить это, если можете, с помощью isset(), но в рабочей коробке вы можете просто скрыть ошибки / предупреждения / уведомления или записать их в личный файл.

0 голосов
/ 27 июля 2011

если вы удалите cookie, cookie исчезнет, ​​поэтому массив $ _COOKIE больше не будет содержать этот специальный ключ cookie.

Возможно, вы захотите проверить, существует ли ключ, прежде чем использовать его на самом деле. Вы можете сделать это с помощью функции array_key_exists (http://php.net/array_key_exists)

0 голосов
/ 27 июля 2011

Я бы сказал, работай как задумано. Чтобы отключить эти виды предупреждений, используйте:

ini_set('display_errors', 0);

Или

ini_set('display_errors', 1);
error_reporting(E_ALL ~ E_WARN); // or some other (combination of) flag(s).
0 голосов
/ 27 июля 2011

Сброс куки, он как переменная, его больше не существует. Это список.

$a = 1;
$a = null;

print $a;
...