Удалить cookie не работает

Привет, я схожу с ума от проблемы, которую пытался найти.

я не могу удалить cookie, который будет установлен на index.php следующим образом:

$a = 'text';
setcookie('name_of_cookie', $a, time()+60*60*24*365);

на странице php я могу назвать этот cookie, и содержимое будет похоже на $ a. я попытался удалить это по-разному на page.php вот так:

setcookie('name_of_cookie', FALSE, time()-3600);

я также нашел версию, где я только установить его:

setcookie('name_of_cookie');

что просто установит еще один куки с таким же именем, как я видел в настройках браузера. у этого нового куки нет содержимого - конечно, контент не объявлен.

я также пытался установить более высокое время в прошлом из-за расположения сервера, но это также не работает. даже пытаясь установить время просто 1 не работает.

я проверил написание имени несколько раз, нет ошибок, которые происходят от разных имен.

Я был бы рад, если бы кто-то мог сказать, что я делаю не так?

Благодарю.

2 ответа

Решение

Когда вы устанавливаете куки, будьте очень конкретными, как вы их устанавливаете. Всегда устанавливайте доменное имя (которое может быть взято из $_SERVER['SERVER_NAME']) и путь (который я обычно устанавливаю в "/"). Если вы не последовательны, что-то может проявить "умную" инициативу и сломать вашу логику. Это часто случается, когда вы устанавливаете куки в JS и пытаетесь удалить их из PHP (или наоборот). У вас может быть несколько файлов cookie с одним и тем же именем, но с другим поддоменом или путем.

Например, вы установили файлы cookie следующим образом:

setcookie( 'Foo', 'Bar', time() + 3600, '/', $_SERVER['SERVER_NAME'] );

И вы их сбрасываете так:

setcookie( 'Foo', '', time() - 999999, '/', $_SERVER['SERVER_NAME'] );

Если пропустить 2 последних аргумента, вы окажетесь в ситуации, в которой вы находитесь на данный момент.

Удалите все куки, как показано ниже.

if (isset($_SERVER['HTTP_COOKIE']))
{
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

Всегда устанавливайте путь при установке cookie, иначе он не уничтожит

Другие вопросы по тегам