Я попытался найти руководство по php и интернету о том, как удалить файлы cookie, и я пробовал его точно так же, как они все говорят:
setcookie("name", '', 1);
или
setcookie("name", '', time()-3600);
Но когда я проверяю файлы cookie в диалоговом окне файлов cookie в Firefox, он все еще там с одинаковым значением. Я установил этот файл cookie, используя следующую строку:
setcookie("name", $value, time() + 259200, $path);
Я нашел этот вопрос в stackoverflow:, но ни один из ответов не решил проблему. Я также попытался включить все параметры, как сказал автор, но это не повлияло.
Кто-нибудь видит проблему?
В руководстве указано :
Файлы cookie должны быть удалены с теми же параметрами, с которыми они были установлены. Если аргумент value – это пустая строка или
FALSE
, а все остальные аргументы соответствуют предыдущему вызову setcookie, cookie с указанным именем будет удален из удаленного клиента. Это внутренне достигается путем установки значения «удаленный» и срок действия до одного года в прошлом.
Поэтому также убедитесь, что $path
указан правильно – также при его удалении . Например, если файл cookie был указан в подкаталоге, вы не сможете удалить его из родительских или дочерних каталогов (или обоих).
Я не совсем уверен, как работают разрешения, но вы можете использовать панель инструментов веб-разработчиков, чтобы узнать, что путь к файлу cookie, который вы пытаетесь удалить.
Хорошо, я действительно не понимаю, но теперь это работает. Магический код:
setcookie("name", '', 1, $path);
Разве я не пробовал это?! Как бы то ни было, сейчас это работает. Спасибо за вашу помощь, люди!
Я попытался использовать
setcookie("name", "", -1);
и на моем сервере с Apache / PHP5 он очистил файл cookie (по крайней мере var_dump ($ _ COOKIE) показал пустой массив).
Я удивлен, что никто не упомянул об этом (или, может быть, я пропустил это), но домен тоже важен ! Если вы находитесь на subdomain.example.com, а файл cookie – с .example.com, вам необходимо явно указать параметр домена, иначе он будет считать текущий домен, и он не будет работать.
setcookie('cookiename', FALSE, -1, '/', '.example.com');
Значение поддоменов не удалит файлы cookie из родительского домена.
Если вы удаляете 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
установить cookie
setcookie ('cookiename', $ cookie_value, time () + (86400 * 30), "/"); // 86400 = 1 день
unset cookie
setcookie ('cookiename', '', time () – 3600, "/");
Не нужно паниковать. Просто скопируйте функцию, которую вы используете, чтобы установить cookie и теперь минус время. Не путайте, делайте это легко и ясно.
Вы пытались установить время на небольшое значение и использовать значение для cookie?
setcookie("name", 'n', 1);
Вы проверяли, отправил ли ваш скрипт свои HTTP-заголовки?
if (headers_sent()) { trigger_error("Cant change cookies", E_USER_NOTICE); }
Случается со мной также один раз в десять раз. Я думаю, что это проблема с тем, как мы кодируем.
Это мой код
setcookie("token", "", time() - 36000, "/");
Я стараюсь использовать
ob_start();
на майне l
У меня была аналогичная проблема.
Я обнаружил, что по какой-то причине, повторяя что-то из logout.php, он фактически удаляет файл cookie:
echo '{}'; setcookie('username', '', time()-3600, '/');
Я удивлен, что никто еще не опубликовал это, но это отлично работает для меня:
СОЗДАТЬ или ИЗМЕНИТЬ файл cookie по имени:
$_COOKIE['myCookieName'] = 'I can be changed to whatever u want';
УДАЛИТЬ файл cookie по имени:
unset($_COOKIE['myCookieName']);
Иногда вы сохраняли cookie на другом пути, чем пытаетесь удалить / использовать его.
Идите, например. Chrome cookie и проверьте путь к файлу cookie, затем добавьте путь к команде setcookie и удалите его следующим образом:
setcookie( "my_cookie_name","",1,'/mypath');
Попытка удалить или удалить файл cookie, который был сохранен на неправильном пути, не будет работать и может быть очень неприятным.
Просто определите пользовательскую функцию в глобальном файле основных функций, например global.php
function delete_cookie() { unset($_COOKIE['cookiename']); setcookie('cookiename',NULL,time()-3600, '/'); return true; }
с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); }
в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); }
Это сделало трюк для меня:
setcookie("brownie","",1,'/'); unset($_COOKIE["brownie"]);
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); } });