Удалить куки - PullRequest
       64

Удалить куки

231 голосов
/ 26 марта 2009

Когда я хочу удалить Cookie, я пытаюсь

unset($_COOKIE['hello']);

В браузере файлов cookie от firefox я вижу, что файл cookie все еще существует. Как я могу действительно удалить куки?

Ответы [ 21 ]

2 голосов
/ 29 ноября 2013

Чтобы удалить все куки, вы можете написать:

foreach ($_COOKIE as $key => $value) {
    unset($value);
    setcookie($key, '', time() - 3600);
}
1 голос
/ 05 июля 2014

Просто установите срок годности на один час назад, если вы хотите «удалить» 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

1 голос
/ 02 марта 2014

Я знаю, что прошло много времени с тех пор, как эта тема была создана, но я увидел небольшую ошибку в этом решении (я могу назвать это так, потому что это деталь). Я согласен, что лучшее решение, вероятно, это решение:

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 с истекшим сроком действия в случае, если функция отмены не работает.

Это означает, что даже если функция unset работает, у нее все равно будет 2 куки на компьютере. Запрашиваемая цель, с логической точки зрения, состоит в том, чтобы удалить куки, если это возможно, и если это действительно так, сделать так, чтобы срок их действия истек; чтобы получить «самый чистый» результат.

Итак, я думаю, нам лучше сделать:

if (isset($_COOKIE['remember_user'])) {
            setcookie('Hello', null, -1, '/');
            setcookie('HelloTest1', null, -1, '/');
            unset($_COOKIE['Hello']);
            unset($_COOKIE['HelloTest1']);
            return true;
        } else {
            return false;
        }

Спасибо и хорошего дня:)

1 голос
/ 22 августа 2015
$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.
0 голосов
/ 18 ноября 2018

Когда вы вводите 0 для времени, вы имеете в виду "сейчас" для браузера.

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
0 голосов
/ 13 сентября 2018

Если вы хотите полностью удалить cookie со всего вашего текущего домена, то вам обязательно поможет следующий код.

unset($_COOKIE['hello']);
setcookie("hello", "", time() - 300,"/");

Этот код полностью удалит переменную cookie со всего вашего домена, т.е. «/» - это значение переменной cookie, установленное для всего домена, а не только для текущего домена или пути. time () - 300 означает, что он устанавливает предыдущее время, поэтому срок его действия истекает.

Вот как он идеально удаляется.

0 голосов
/ 22 июля 2016

Вы должны удалить куки с 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']);
0 голосов
/ 24 июня 2016

Большинство из вас забывают, что это будет работать только на локальной машине. В домене вам понадобится шаблон, подобный этому примеру.

setcookie("example_cookie", 'password', time()-3600, "/", $_SERVER['SERVER_NAME']);
0 голосов
/ 26 марта 2009

Вы можете установить переменную сеанса на основе значений 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");
0 голосов
/ 29 ноября 2015

Все просто!

setcookie("cookiename", "cookievalue", 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...