Коли я хочу видалити cookie, я намагаюся
unset($_COOKIE['hello']);
Я бачу в своєму браузері файлів cookie від firefox, що файл cookie все ще існує. Як я дійсно можу видалити печиво?
Коли я хочу видалити cookie, я намагаюся
unset($_COOKIE['hello']);
Я бачу в своєму браузері файлів cookie від firefox, що файл cookie все ще існує. Як я дійсно можу видалити печиво?
Відповіді:
Ви можете спробувати це
if (isset($_COOKIE['remember_user'])) {
unset($_COOKIE['remember_user']);
setcookie('remember_user', null, -1, '/');
return true;
} else {
return false;
}
unset($_COOKIE['Hello']);
. Це нічого не змінить, якщо ви виймете його.
unset($_COOKIE['Hello']);
насправді важливий, якщо ви можете перевірити файл cookie десь пізніше в коді.
Встановіть значення "", а термін придатності - вчора (або будь-яку дату в минулому)
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
}
setcookie
дзвінка:setcookie('key', '', time() - 3600, '/');
unsetting
успішно.
null
значеннями, замість цього вам потрібно буде використовувати array_key_exists () , оскільки файл cookie зі null
значенням не буде знайдений isset()
чеком.
Для надійного видалення файлу cookie недостатньо встановити термін його дії в будь-який час у минулому, як це було обчислено вашим сервером PHP. Це відбувається тому, що клієнтські комп'ютери можуть і часто мають час, який відрізняється від вашого сервера.
Найкраща практика - замінити поточний файл cookie порожнім файлом cookie, який закінчується на одну секунду в майбутньому після епохи (1 січня 1970 р. 00:00:00 UTC) таким чином:
setcookie("hello", "", 1);
Це скине файл cookie у вашому коді, але оскільки змінна $ _COOKIE оновлюється в кожному запиті, вона просто повернеться до наступного запиту на сторінці.
Щоб фактично позбутися від cookie, встановіть дату закінчення терміну дії:
// set the expiration date to one hour ago
setcookie("hello", "", time()-3600);
unset()
в печиві?
У мене була така ж проблема в моєму коді, і я виявив, що це проблема шляху cookie. Ознайомтеся з цим повідомленням про переповнення стека. Неможливо видалити файли 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 () на php.net
Дивіться зразок з написом " Приклад №2 setcookie () delete example " з документів PHP. Щоб очистити файл cookie від веб-переглядача, потрібно повідомити браузеру, що термін дії cookie закінчився ... браузер його потім видалить. unset
як ви його використовували, він просто видаляє "привіт" cookie з масиву COOKIE.
Ось як працює код PHP v7 setcookie (), коли ви робите:
<?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);
Але я помітив, що всі встановлюють термін придатності до минулого, це потрібно, і чому?
''
- це не те саме, що null
.
Щоб видалити всі файли cookie, які ви могли написати:
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;
}
Але в цьому випадку ви видаляєте файли cookie у кожному випадку, коли функція скидання працює, і ви негайно створюєте нові файли cookie, що втратили чинність, у випадку, якщо функція скидання не працює.
Це означає, що навіть якщо функція скидання працює, вона все одно матиме 2 файли cookie на комп’ютері. Задана мета, з логічної точки зору, - видалити файли 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_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.
Якщо ви хочете повністю видалити файли cookie з усіх ваших поточних доменів, наступний код вам точно допоможе.
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');
Коли ви вводите 0
час, ви маєте на увазі "зараз" (+ 0s - це насправді зараз) для браузера, і він видаляє файли cookie.
setcookie("key", NULL, 0, "/");
Я перевірив це в хромованому браузері, який дає мені:
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 false
, щоб скасувати його,
setcookie('cookiename', false);
PS: - Це найпростіший спосіб зробити це.
Ви повинні видалити файли 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']);
setcookie
працює для будь-якого домену, будь то localhost чи ні.
$cookie->delete()
з github.com/delight-im/PHP-Cookie корисні. Код із запитання просто видаляє властивість, яка була проаналізована на стороні сервера. Файли cookie продовжують працювати на стороні клієнта.