Проблемы с удалением файлов 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);
}
});