Проблемы с удалением куки, не сбрасываются

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

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

or

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

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

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

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

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


person RemiX    schedule 18.05.2010    source источник
comment
точки в именах файлов cookie заменены символами _ - это может вызвать некоторые проблемы   -  person Andris    schedule 29.05.2015
comment
Во-первых, убедитесь, что представление файлов cookie (например, в Firefox) действительно обновлено. Затем сделайте то, что вы уже сделали, но обратите внимание на все свойства, которые должны быть одинаковыми для операции установки и отмены или удаления. Кроме того, вы можете использовать что-то вроде $cookie->delete(); из github.com/delight-im/PHP-Cookie для большего удобства.   -  person caw    schedule 13.07.2016


Ответы (18)


В руководстве говорится:

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

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

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

person Paul Lammertsma    schedule 18.05.2010
comment
Я проверяю диалоговое окно «Файлы cookie» Firefox, и путь, который я использую для установки файла cookie, совпадает с путем, который я использую для его отмены. Но адрес, по которому я пытаюсь удалить файл cookie, не совпадает с путем, на который я установил файл cookie. Я также узнал, что я могу изменить значение файла cookie, если срок действия находится в будущем. Если я использую значение в прошлом, ничего не происходит. Странный? - person RemiX; 18.05.2010
comment
После нескольких минут тестов я не смог заставить его работать! Никакого удаления файлов cookie. Теперь я знаю: используйте setcookie с теми же параметрами, которые вы использовали во время создания, $path,$domain и так далее. setcookie($name,NULL,-1) недостаточно! Спасибо за ваше замечание! - person michauko; 07.01.2013
comment
НАКОНЕЦ!!! Я установил расширение Chrome, чтобы узнать, какой путь был для файла cookie, установленного моим приложением, и тогда я наконец смог его полностью отключить! Блестящий ответ! - person kpollock; 26.09.2016
comment
Я ломал голову над этим, спасибо за этот ответ. - person Cesar Bielich; 28.01.2017

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

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

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

person RemiX    schedule 20.05.2010

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

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

Значение поддоменов не приведет к удалению файлов cookie из родительского домена.

person bfuzze    schedule 21.11.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
person Ruslan    schedule 22.01.2016
comment
Спасибо тебе за это! Я не могу поверить, что это все еще происходит в 2021 году. Чтобы удалить конкретный файл cookie, мне пришлось использовать ваше предложение, которое я нашел после нескольких часов возни. Я знаю, что для удаления определенного файла cookie (для будущих пользователей) используйте следующее unset($_COOKIE['name']); setcookie("name", '', 1, '/'); setcookie("name", '', 1, ''); - person purple11111; 06.04.2021

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

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

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

person Keeper    schedule 18.05.2010

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

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}
person Bob Fanger    schedule 18.05.2010

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

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);
person Felipe    schedule 31.10.2016

Вы пытались установить время на небольшое значение и использовать значение для файла cookie?

setcookie("name", 'n', 1);
person Sandeep    schedule 18.05.2010
comment
Я обнаружил, что на самом деле могу изменить значения, если срок действия истекает в будущем. Тогда значение не имеет значения. Но использование «1» в качестве времени, похоже, не работает, как и time()-3600. - person RemiX; 18.05.2010

Хотя и у меня такое бывает один раз из десяти. Я думаю, это проблема с тем, как мы кодируем.

это мой код

setcookie("token", "", time() - 36000, "/");
person Atif    schedule 18.05.2010
comment
В чем именно разница? Я также пытался использовать параметр пути, если вы это имеете в виду? - person RemiX; 18.05.2010
comment
Нет, я хочу сказать, что даже у меня такая же проблема, как у вас. - person Atif; 21.05.2010

Я предлагаю использовать

ob_start();

в первый л

person Benhard Jei    schedule 16.11.2012

У меня была аналогичная проблема.

Я обнаружил, что по какой-то причине повторение чего-либо из logout.php фактически привело к удалению файла cookie:

echo '{}';
setcookie('username', '', time()-3600, '/');
person Nate    schedule 28.05.2013
comment
Странно, должно быть все наоборот. Удаление должно быть возможно только до первого вывода, а не после него. - person MilanG; 25.11.2020

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

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

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

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

person kochauf    schedule 09.05.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);
}
person karthikeyan ganesan    schedule 21.10.2015

установить файл cookie

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

отключить файл cookie

setcookie('имя_cookie', '', time() - 3600, "/");

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

person Rajnesh Thakur    schedule 28.05.2016
comment
Я использую буквально один и тот же вызов функции для удаления одного и того же файла cookie, и один раз он работает, а другой раз - нет. - person MilanG; 25.11.2020

Как сказано в правильном ответе (я хочу, чтобы он отправил обновленный), для отмены необходим каждый параметр, используемый для установки файла cookie, даже secure и httponly

Задавать

setcookie("name_cookie", $name_value, 0, '/', $domain, false, true);

Снят с охраны

setcookie("name_cookie", '', time()-1000, '/', $domain, false, true);
person Gendrith    schedule 12.04.2019

это мой опыт работы с файлами cookie: файл cookie не может быть удален с клиентского компьютера до тех пор, пока не будет закрыто окно браузера (которое мы используем для просмотра существующего файла cookie). Так что закройте это окно и попробуйте свой код.

  • Все параметры должны быть там при удалении того, что было при создании
  • время должно быть в прошлом
  • значение должно быть '' (пусто)
  • путь к папке должен быть таким же во время создания
person Poonam Bhatt    schedule 14.05.2020

Я удивлен, что никто еще не опубликовал это, но это отлично работает для меня:

Чтобы СОЗДАТЬ или ИЗМЕНИТЬ файл cookie по имени:

$_COOKIE['myCookieName'] = 'I can be changed to whatever u want';

Чтобы УДАЛИТЬ файл cookie по имени:

unset($_COOKIE['myCookieName']);
person de Raad    schedule 18.06.2014

person    schedule
comment
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. - person DimaSan; 14.12.2016