Как удалить все файлы cookie моего сайта в php

Мне интересно, могу ли я удалить все куки файлы своего веб-сайта, когда пользователь нажимает на выход из системы, потому что я использовал это как функцию для удаления файлов cookie, но он не работает должным образом:

setcookie("user",false);

Есть ли способ удалить cookie одного домена в PHP?

Ответ 1

PHP setcookie()

Взятый с этой страницы, это приведет к отключению всех файлов cookie для вашего домена:

// unset cookies
if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

http://www.php.net/manual/en/function.setcookie.php#73484

Ответ 2

$past = time() - 3600;
foreach ( $_COOKIE as $key => $value )
{
    setcookie( $key, $value, $past, '/' );
}

Однако лучше помнить (или хранить его где-нибудь), какие файлы cookie устанавливаются с вашим приложением в домене и удалять все это напрямую.
Таким образом, вы можете обязательно правильно удалить все значения.

Ответ 3

Я согласен с некоторыми из приведенных выше ответов. Я бы просто рекомендовал заменить "time() - 1000" на "1". Значение "1" означает 1 января 1970 года, что гарантирует истечение 100%. Поэтому:

setcookie($name, '', 1);
setcookie($name, '', 1, '/');

Ответ 4

убедитесь, что вы вызываете функцию setcookie до того, как какой-либо вывод произойдет на вашем сайте.

также, если ваши пользователи выходят из системы, вы также должны удалить/аннулировать свои переменные сеанса.

Ответ 5

Когда вы меняете имя своего Cookies, вы также можете удалить все файлы cookie, но сохранить его:

if (isset($_COOKIE)) {
    foreach($_COOKIE as $name => $value) {
        if ($name != "preservecookie") // Name of the cookie you want to preserve 
        {
            setcookie($name, '', 1); // Better use 1 to avoid time problems, like timezones
            setcookie($name, '', 1, '/');
        }
    }
}

Также на основе этого PHP-answer

Ответ 6

Вам следует знать о различных инструментах отслеживания, таких как Google Analytics, также использовать файлы cookie в вашем домене, и вы не хотите их удалять, если вы хотите иметь правильные данные в GA.

Единственное решение, с которым я мог работать, это установить существующие файлы cookie на null. Я не смог удалить файлы cookie с клиента.

Итак, для регистрации пользователя я использую следующее:

setcookie("username", null, time()+$this->seconds, "/", $this->domain, 0);
setcookie("password", null, time()+$this->seconds, "/", $this->domain, 0);

Конечно, это не удаляет ВСЕ файлы cookie.

Ответ 7

Все предыдущие ответы упускают из виду, что setcookie можно было использовать с явным доменом. Кроме того, файл cookie может быть установлен на более высокий субдомен, например. если вы были в домене foo.bar.tar.com, на tar.com может быть установлен файл cookie. Поэтому вы хотите отключить файлы cookie для всех доменов, которые могли бы удалить файл cookie:

$host = explode('.', $_SERVER['HTTP_HOST']);

while ($host) {
    $domain = '.' . implode('.', $host);

    foreach ($_COOKIE as $name => $value) {
        setcookie($name, '', 1, '/', $domain);
    }

    array_shift($host);
}

Ответ 8

Используйте эту функцию для очистки файлов cookie:

function clearCookies($clearSession = false)
{
    $past = time() - 3600;
    if ($clearSession === false)
        $sessionId = session_id();
    foreach ($_COOKIE as $key => $value)
    {
        if ($clearSession !== false || $value !== $sessionId)
            setcookie($key, $value, $past, '/');
    }
}

Если вы пройдете true, тогда он очистит данные session, в противном случае данные сеанса сохранятся.