Когда я хочу удалить Cookie, я пытаюсь
unset($_COOKIE['hello']);
Я вижу в своем браузере cookie от firefox, что файл cookie все еще существует. Как я могу удалить cookie?
Вы можете попробовать это
if (isset($_COOKIE['remember_user'])) { unset($_COOKIE['Hello']); unset($_COOKIE['HelloTest1']); setcookie('Hello', null, -1, '/'); setcookie('HelloTest1', null, -1, '/'); return true; } else { return false; }
сif (isset($_COOKIE['remember_user'])) { unset($_COOKIE['Hello']); unset($_COOKIE['HelloTest1']); setcookie('Hello', null, -1, '/'); setcookie('HelloTest1', null, -1, '/'); return true; } else { return false; }
сif (isset($_COOKIE['remember_user'])) { unset($_COOKIE['Hello']); unset($_COOKIE['HelloTest1']); setcookie('Hello', null, -1, '/'); setcookie('HelloTest1', null, -1, '/'); return true; } else { return false; }
Установите значение «» и дату истечения срока действия до вчерашнего дня (или любую дату в прошлом)
setcookie("hello", "", time()-3600);
Затем файл cookie истечет при следующем загрузке страницы.
$_COOKIE
способом удаления cookie является очистка значения $_COOKIE
и файла cookie браузера:
if (isset($_COOKIE['key'])) { unset($_COOKIE['key']); setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp }
сif (isset($_COOKIE['key'])) { unset($_COOKIE['key']); setcookie('key', '', time() - 3600, '/'); // empty value and old timestamp }
Это отключит cookie в вашем коде, но поскольку переменная $ _COOKIE обновляется по каждому запросу, она просто вернется к следующему запросу страницы.
Чтобы фактически избавиться от файла cookie, установите дату истечения срока действия в прошлом:
// set the expiration date to one hour ago setcookie("hello", "", time()-3600);
Чтобы надежно удалить куки-файл, вы не должны устанавливать его в прошлом, потому что клиентские компьютеры могут и часто имеют время, отличное от того, что у вашего сервера. Лучшая практика заключается в том, чтобы перезаписать текущий файл cookie с пустым файлом cookie, который в будущем истекает через секунду;
setcookie("hello", "", 1);
У меня была такая же проблема в моем коде и я обнаружил, что это проблема с файлом cookie. Проверьте этот пост переполнения стека: не удается удалить php set cookie
Я установил файл 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 () delete на php.net
См. Образец с надписью « Пример №2 setcookie () удалить пример » из документов PHP. Чтобы очистить cookie от браузера, вам нужно сообщить браузеру, что срок действия файла cookie истек … браузер удалит его. unset
поскольку вы использовали его, просто удаляет cookie 'hello' из массива 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); }
сforeach ($_COOKIE as $key => $value) { unset($value); setcookie($key, '', time() - 3600); }
Просто установите дату истечения срока действия на час назад, если вы хотите «удалить» 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
Я знаю, что уже давно эта тема была создана, но я видел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен с тем, что лучшим решением, вероятно, является это решение:
if (isset($_COOKIE['remember_user'])) { unset($_COOKIE['Hello']); unset($_COOKIE['HelloTest1']); setcookie('Hello', null, -1, '/'); setcookie('HelloTest1', null, -1, '/'); return true; } else { return false; }
сif (isset($_COOKIE['remember_user'])) { unset($_COOKIE['Hello']); unset($_COOKIE['HelloTest1']); setcookie('Hello', null, -1, '/'); setcookie('HelloTest1', null, -1, '/'); return true; } else { return false; }
с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; }
сif (isset($_COOKIE['remember_user'])) { setcookie('Hello', null, -1, '/'); setcookie('HelloTest1', null, -1, '/'); unset($_COOKIE['Hello']); unset($_COOKIE['HelloTest1']); return true; } else { return false; }
с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_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.
Это просто!
setcookie("cookiename", "cookievalue", 1);
Вы можете установить переменную сеанса, основанную на значениях 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; } }
с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');
Вы должны удалить файлы 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']);
с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']);