Проблемы с удалением файлов cookie не будут отменены

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

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

или

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

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

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

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

if (headers_sent()) {
  trigger_error("Cant change cookies", E_USER_NOTICE);
}

Ответ 6

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

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

setcookie('cookiename', '', time() - 60*60*24, $chatPath); // WebKit
setcookie('cookiename', '', time() - 60*60*24, $chatPath . '/'); // Gecko, IE

Ответ 7

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

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

unset cookie

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

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

Ответ 8

Это сделало трюк для меня:

setcookie("brownie","",1,'/');
unset($_COOKIE["brownie"]);

Ответ 9

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

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

Ответ 10

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

Это мой код

setcookie("token", "", time() - 36000, "/");

Ответ 11

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

ob_start();

на firts l

Ответ 12

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

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

echo '{}';
setcookie('username', '', time()-3600, '/');

Ответ 13

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

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

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

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

Ответ 14

Просто определите пользовательскую функцию в глобальном файле основных функций, например 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);
}

Ответ 15

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

Задавать

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

Отозвать

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

Ответ 16

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

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

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

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

unset($_COOKIE['myCookieName']);

Ответ 17

var remember = $.cookie('auto_login');
if (remember == 'true') {
    var username = $.cookie('username');
    var password = $.cookie('password');
    $('#username').val(username);
    $('#password').val(password);
}

$('#logsub').click(function (event) {
    if ($('#auto_login').is(':checked')) {
        var username = $('#username').val();
        var password = $('#password').val();
        // set cookies to expire in 14 days
        $.cookie('username', username, {expires: 14});
        $.cookie('password', password, {expires: 14});
        $.cookie('auto_login', true, {expires: 14});
    } else {
        // reset cookies
        $.cookie('username', null);
        $.cookie('password', null);
        $.cookie('auto_login', null);
    }
});