Когда я хочу удалить Cookie, я попробую
unset($_COOKIE['hello']);
Я вижу в своем браузере cookie от firefox, что файл cookie все еще существует. Как я могу удалить cookie?
Когда я хочу удалить Cookie, я попробую
unset($_COOKIE['hello']);
Я вижу в своем браузере cookie от firefox, что файл cookie все еще существует. Как я могу удалить cookie?
Вы можете попробовать это
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
setcookie('Hello', null, -1, '/');
return true;
} else {
return false;
}
Установите значение "" и дату истечения срока действия до вчерашнего дня (или любую дату в прошлом)
setcookie("hello", "", time()-3600);
Затем cookie истечет при следующем загрузке страницы.
Чистым способом удаления cookie является очистка как значения $_COOKIE
, так и файла cookie браузера:
if (isset($_COOKIE['key'])) {
unset($_COOKIE['key']);
setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp
}
Чтобы надежно удалить куки файл, этого недостаточно, чтобы он истекал в любое время в прошлом, как это было рассчитано вашим PHP-сервером. Это связано с тем, что клиентские компьютеры могут и часто имеют время, отличающееся от того, что у вашего сервера.
Лучше всего, чтобы перезаписать текущее печенье с пустым печеньем, который истекает через одну секунды в будущем после эпохи (1 января 1970 00:00:00 UTC), а так:
setcookie("hello", "", 1);
Это приведет к отключению файла cookie в вашем коде, но поскольку переменная $_COOKIE обновляется по каждому запросу, она просто вернется к следующему запросу страницы.
Чтобы избавиться от файла cookie, установите дату истечения срока действия в прошлом:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
У меня была такая же проблема в моем коде и я обнаружил, что это проблема с файлом cookie. Проверьте этот пост: Не удается удалить файл cookie php set
Я установил файл cookie с использованием значения пути "/", но у меня не было никакого значения пути, когда я попытался его очистить, поэтому он не понял. Итак, вот пример того, что сработало:
Настройка файла cookie:
$cookiePath = "/";
$cookieExpire = time()+(60*60*24);//one day -> seconds*minutes*hours
setcookie("CookieName",$cookieValue,$cookieExpire,$cookiePath);
Очистка файла cookie:
setcookie("cookieName","", time()-3600, $cookiePath);
unset ($_COOKIE['cookieName']);
Надеюсь, что это поможет.
Если вы установили срок действия файла cookie в прошлом, браузер удалит его. См. setcookie() удалить пример на php.net
См. образец с надписью " Пример # 2 setcookie() удалить пример" из документов PHP. Чтобы очистить cookie от браузера, вам нужно сообщить браузеру, что срок действия файла cookie истек... браузер удалит его. unset
, поскольку вы использовали его, просто удаляет "hello" cookie из массива COOKIE.
Так работает код setcookie() PHP v7, когда вы делаете:
<?php
setcookie('user_id','');
setcookie('session','');
?>
Из вывода tcpdump во время нюхания на порт 80 сервер отправляет клиенту (браузеру) следующие HTTP-заголовки:
Set-Cookie: user_id=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Set-Cookie: session=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0
Наблюдение пакетов в следующих запросах Браузер больше не отправляет эти файлы cookie в заголовки
Чтобы удалить файл cookie, вам нужно просто установить значение NULL:
"Если вы установили cookie с недопустимыми значениями для времени истечения срока действия, пути или домена, вы должны снова указать те же самые значения, когда вы удаляете cookie для файла cookie, который будет удален правильно." Цитата из книги "Изучение PHP5".
Итак, этот код должен работать (работает для меня):
Настройка файла cookie:
setcookie('foo', 'bar', time() + 60 * 5);
Удаление файла cookie:
setcookie('foo', '', time() + 60 * 5);
Но я заметил, что все устанавливают дату истечения срока прошлого, это необходимо и почему?
Чтобы удалить все файлы cookie, вы можете написать:
foreach ($_COOKIE as $key => $value) {
unset($value);
setcookie($key, '', time() - 3600);
}
Я знаю, что с тех пор, как эта тема была создана, прошло много времени, но я видел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен с тем, что лучшим решением, вероятно, является это решение:
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
return true;
} else {
return false;
}
Но в данном случае вы удаляете файлы cookie в каждом случае, когда работает функция unset, и сразу же вы создаете новые истекшие файлы cookie в случае, если функция unset не работает.
Это означает, что даже если функция unset работает, на компьютере все равно будет 2 куки. Задача, с логической точки зрения, состоит в том, чтобы удалить файлы cookie, если это возможно, и если это действительно так, истечет срок ее действия; чтобы получить "самый чистый" результат.
Итак, я думаю, нам лучше делать:
if (isset($_COOKIE['remember_user'])) {
setcookie('Hello', null, -1, '/');
setcookie('HelloTest1', null, -1, '/');
unset($_COOKIE['Hello']);
unset($_COOKIE['HelloTest1']);
return true;
} else {
return false;
}
Спасибо и приятный день:)
Просто установите дату истечения срока действия на час назад, если вы хотите "удалить" файл cookie, например:
setcookie ("TestCookie", "", time() - 3600);
или
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
Источник: http://www.php.net/manual/en/function.setcookie.php
Вы должны использовать функцию filter_input()
для всех глобалов, которые посетитель может ввести/манипулировать, например:
$visitors_ip = filter_input(INPUT_COOKIE, 'id');
Подробнее об этом можно прочитать здесь: http://www.php.net/manual/en/function.filter-input.php и здесь: http://www.w3schools.com/php/func_filter_input.asp
$cookie_name = "my cookie";
$cookie_value = "my value";
$cookie_new_value = "my new value";
// Create a cookie,
setcookie($cookie_name, $cookie_value , time() + (86400 * 30), "/"); //86400 = 24 hours in seconds
// Get value in a cookie,
$cookie_value = $_COOKIE[$cookie_name];
// Update a cookie,
setcookie($cookie_name, $cookie_new_value , time() + (86400 * 30), "/");
// Delete a cookie,
setcookie($cookie_name, '' , time() - 3600, "/"); // time() - 3600 means, set the cookie expiration date to the past hour.
Если вы хотите полностью удалить куки со всего вашего текущего домена, то следующий код определенно вам поможет.
unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");
Этот код полностью удалит переменную cookie из всего вашего домена, т.е. "/" - это значение переменной cookie, установленное для всего домена, а не только для текущего домена или пути. time() - 300 означает, что он устанавливает предыдущее время, поэтому срок его действия истекает.
Вот как это отлично удалили.
Вы можете установить переменную сеанса на основе значений cookie
session_start();
if(isset($_COOKIE['loggedin']) && ($_COOKIE['loggedin'] == "true") ){
$_SESSION['loggedin'] = "true";
}
echo ($_SESSION['loggedin'] == "true" ? "You are logged in" : "Please Login to continue");
Вы можете просто использовать эту функцию настройки:
function unset_cookie($cookie_name) {
if (isset($_COOKIE[$cookie_name])) {
unset($_COOKIE[$cookie_name]);
setcookie($cookie_name, null, -1);
} else { return false; }
}
Если вы хотите удалить $_COOKIE ['user_account'].
Просто используйте:
unset_cookie('user_account');
Это просто!
setcookie("cookiename", "cookievalue", 1);
Когда вы вводите 0
для времени, вы имеете в виду "сейчас" (+0s с этого момента фактически сейчас) для браузера, и он удаляет cookie.
setcookie("key", NULL, 0, "/");
Я проверил это в браузере Chrome, который дает мне:
Name: key
Content: Deleted
Created: Sunday, November 18, 2018 at 2:33:14 PM
Expires: Sunday, November 18, 2018 at 2:33:14 PM
@Петр правильно, домен требуется. В противном случае cookie не удаляется, хотя в документации PHP указано, что домен является необязательным.
Вы должны удалить файлы cookie с php на своем сервере, а также js для своего браузера. (Они сделали с php, но файлы cookie также находятся в клиенте браузера):
Пример:
if ($_GET['action'] == 'exit'){
// delete cookies with js and then in server with php:
echo '
<script type="text/javascript">
var delete_cookie = function(name) {
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:01 GMT;";
};
delete_cookie("madw");
delete_cookie("usdw");
</script>
';
unset($_COOKIE['cookie_name']);
unset($_COOKIE['cookie_time']);
Большинство из вас забывают, что это будет работать только на локальной машине. В домене вам понадобится шаблон, подобный этому примеру.
setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);