Проблемы с удалением куки, не будут сброшены - PullRequest
22 голосов
/ 18 мая 2010

Я попытался найти в руководстве по php и в интернете, как удалить куки, и я попробовал это точно так же, как они все говорят:

setcookie("name", '', 1);

или

setcookie("name", '', time()-3600);

Но когда я проверяю куки в диалоге куки в Firefox, он все еще там с тем же значением. Я установил этот cookie, используя следующую строку:

setcookie("name", $value, time() + 259200, $path);

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

Кто-нибудь видит проблему?

Ответы [ 17 ]

51 голосов
/ 18 мая 2010

В руководстве указано :

Cookies должны быть удалены с такими же параметрами, как они были установлены. Если аргумент value представляет собой пустую строку или FALSE, а все остальные аргументы соответствуют предыдущему вызову setcookie, то cookie с указанным именем будет удален с удаленного клиента. Это достигается за счет установки значения «удалено» и истечения срока годности на один год в прошлом.

Также убедитесь, что $path указано правильно - также при его удалении . Например, если файл cookie был указан в подкаталоге, вы не сможете удалить его ни из родительского, ни из дочерних каталогов (или из обоих).

Я не совсем уверен, как работают разрешения, но вы можете использовать панель инструментов веб-разработчика, чтобы просмотреть, какой путь 1016 * имеет к cookie, который вы пытаетесь удалить.

9 голосов
/ 20 мая 2010

Хорошо, я действительно не понимаю, но теперь это работает. Магический код:

setcookie("name", '', 1, $path);

Разве я не пробовал это ??! Как бы то ни было, сейчас это работает. Спасибо за помощь, люди!

6 голосов
/ 21 ноября 2016

Я удивлен, что никто не упомянул это (или, возможно, я пропустил это), но домен тоже важен ! Если вы находитесь на sub-domain.example.com, а cookie - от .example.com, то вам нужно явно установить параметр домена, иначе он примет текущий домен и не будет работать.

setcookie('cookiename', FALSE, -1, '/', '.example.com');

Значение субдоменов не удаляет куки из родительского домена.

2 голосов
/ 22 января 2016

Если вы удалите cookie для определенного пути, а ваш параметр path оканчивается косой чертой / ', тогда он будет работать в Firefox и IE, но не будет работать в Chrome и Opera. Если косой черты нет, она будет работать только в Chrome и Opera.

Так что вы должны использовать оба:

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE
2 голосов
/ 18 мая 2010

Я пытался использовать

setcookie("name", "", -1);

и на моем сервере с Apache / PHP5 он очистил куки (по крайней мере, var_dump ($ _ COOKIE) показывал пустой массив).

2 голосов
/ 18 мая 2010

Вы проверяли, отправляет ли ваш скрипт свои заголовки HTTP?

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}
1 голос
/ 31 октября 2016

Это помогло мне:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);
1 голос
/ 28 мая 2016

установить печенье

setcookie ('cookiename', $ cookie_value, time () + (86400 * 30), "/"); // 86400 = 1 день

неустановленное печенье

setcookie ('cookiename', '', time () - 3600, "/");

Не нужно паниковать. Просто скопируйте функцию, которую вы используете, чтобы установить cookie, и теперь минус время. Не путайся, делай это легко и понятно.

0 голосов
/ 21 октября 2015

Просто определите пользовательскую функцию в файле глобальных основных функций, например global.php

function delete_cookie()
{
unset($_COOKIE['cookiename']);
setcookie('cookiename',NULL,time()-3600, '/');
return true;
}

и используйте эту функцию в верхней части HTML-кода, например

include('global.php')
if(isset($_GET['delete_cookie']))
{
delete_cookie(); //if you want to pass the parameters into the function also possible like delete_cookie(param1);
}
0 голосов
/ 09 мая 2015

Иногда вы сохранили куки по другому пути, чем пытаетесь удалить / использовать его.

Зайдите, например. Настройки cookie Chrome и проверьте путь к cookie, затем добавьте путь к команде setcookie и удалите его следующим образом:

setcookie( "my_cookie_name","",1,'/mypath');

Попытка удалить или сбросить файл cookie, сохраненный по неверному пути, не будет работать и может быть очень неприятной.

...