- как удалить все куки моего сайта в php
- 8 ответов
- Работа с cookie в PHP
- Установка cookies
- Пример установки cookies:
- Пример установки массива в cookies:
- или
- Чтение cookies
- Например, вывести одно конкретное значение cookie:
- Вывести массив:
- Удаление cookies
- Удалить все cookie
- PHP Cookie — практические примеры использования
- Как установить куки в PHP
- Как получить, прочитать, проверить cookie в PHP
- Авторизация с использованием PHP Cookie
- Счетчик просмотров страницы на PHP + cookie
- Время жизни cookie в PHP
- Как удалить или очистить (unset) куки в PHP
как удалить все куки моего сайта в php
Мне интересно, могу ли я удалить все куки файлы своего веб-сайта, когда пользователь нажимает на выход из системы, потому что я использовал это как функцию для удаления файлов cookie, но он не работает должным образом:
В большинстве случаев лучше будет использовать файлы cookie более разумно и избирательно. Если вы используете сеансы, одного куки будет достаточно. В любом случае, отследите, какие куки вы установили, и тогда вам не понадобится какой-то динамический способ их перебора и удаления.
8 ответов
Взятый с этой страницы, это приведет к отключению всех файлов 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_COOKIE было бы лучше, чем цикл по массиву $_COOKIE . Есть ли у вас причины для этого? Для меня это выглядит только как (двойная) работа для парсера.
@poke: если имена файлов cookie находятся в нотации Array, например: user [username], тогда PHP автоматически создаст соответствующий массив в $ _COOKIE. Вместо этого используйте $ _SERVER [‘HTTP_COOKIE’], поскольку он отражает фактические заголовки HTTP-запроса.
У меня были проблемы с удалением файлов cookie с помощью этого метода, но по какой-то странной причине, если я использую команду setcookie с пробелом ‘ ‘ вместо пустой строки » она работает намного лучше. Есть идея посмотреть, как это делает WordPress.
Я видел ситуации, когда есть 2 куки с тем же именем, но с разными настройками домена. Один из них попадет в массив $ _COOKIE, а другой — нет. Но они оба будут видны в HTTP_COOKIE. Если вы хотите исправить эту ситуацию, это способ сделать это.
Файлы cookie разделяются символом «; » (точка с запятой, за которым следует пробел), а не точка с запятой.
$past = time() - 3600; foreach ( $_COOKIE as $key => $value ) < setcookie( $key, $value, $past, '/' ); >
Однако лучше помнить (или хранить его где-нибудь), какие файлы cookie устанавливаются с вашим приложением в домене и удалять все это напрямую.
Таким образом, вы можете обязательно правильно удалить все значения.
отличный код, но не достаточно для использования setcookie( $key, FALSE ); ?! (см. заметки на сайте php.net/manual/en/function.setcookie.php )
@Marco Demaio: так и должно быть, но я видел, что в прошлом на некоторых серверах происходил сбой. Но, конечно, если это работает для вас, просто сделайте это так 🙂
это не должно зависеть от сервера, это PHP делает это внутренне. А зачем нужен финал / вы поместили в setcookie ?
@Marco Demaio: Да, под сервером я имел в виду php-сервер. / Это путь к cookie. Вам нужно установить его так, чтобы вы могли удалять куки из домена, в противном случае он установлен на текущий путь и влияет только на те, которые установлены для текущего пути.
@trante Невозможно, чтобы $ value также был массивом; куки — это пары ключ-значение. Возможно, что значение предназначено для представления массива, но затем оно каким-то образом сериализуется в виде строки.
@poke Хорошо, в моей ситуации этот фрагмент не мог решить мою проблему. Пожалуйста, попробуйте установить cookie, как это, и попробуйте удалить его с помощью своего фрагмента кода: setcookie(«Mycookie[ishere]»,»aa»,0);
@trante вы правы, это не удалит такие куки. Это то же самое, что и установка $_COOKIE[‘some’][‘key’] = ‘value’; но принятый ответ должен заботиться о тех,
Я согласен с некоторыми из приведенных выше ответов. Я бы просто рекомендовал заменить «time() — 1000» на «1». Значение «1» означает 1 января 1970 года, что гарантирует истечение 100%. Поэтому:
setcookie($name, '', 1); setcookie($name, '', 1, '/');
Я всегда удивлялся, почему никто не говорит просто сделать это, и это своего рода ответ, который я искал.
Возможно, это не проблема в настоящее время, но в какой-то момент некоторые браузеры игнорировали устаревшую дату, и значения не будут отбрасываться, как следовало бы. Я считаю, что IE 7 является одним из примеров, который сделал это.
убедитесь, что вы вызываете функцию setcookie до того, как какой-либо вывод произойдет на вашем сайте.
также, если ваши пользователи выходят из системы, вы также должны удалить/аннулировать свои переменные сеанса.
Когда вы меняете имя своего Cookies, вы также можете удалить все файлы cookie, но сохранить его:
Вам следует знать о различных инструментах отслеживания, таких как 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.
Я бы не рекомендовал хранить пароль пользователя в куки. Это серьезная дыра в безопасности, особенно учитывая, что аргумент 0 означает, что cookie даже не шифруется при передаче.
Используйте эту функцию для очистки файлов 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 , в противном случае данные сеанса сохранятся.
Работа с cookie в PHP
Cookies – это механизм хранения данных браузером для отслеживания или идентификации возвращающихся посетителей. В PHP работа с Cookie происходит следующем образом:
Установка cookies
Установка cookies производится функцией setcookie или setrawcookie (без URL-кодирования значения).
Cookie передаются клиенту вместе с другими HTTP-заголовками, поэтому setcookie() должна быть вызвана до вывода в браузер.
setcookie($name, $value, $expires, $path, $domain, $secure, $httponly);
$expires – время жизни (метка времени Unix), если 0 или пропустить аргумент, cookie будут действовать до закрытия браузера.
$path – путь к директории, из которой будут доступны cookie. Если задать ‘/’, cookie будут доступны во всем домене.
$domain – домен, которому доступны cookie. Например, ‘ www.example.com ‘ сделает cookie доступными только в нём. Для того, чтобы сделать cookie доступными для всего домена и поддоменов, нужно указать имя домена ‘ example.com ‘.
$secure – при true значения cookie будут доступны только по HTTPS.
$httponly – при true , cookie будут доступны только через HTTP-протокол.
Пример установки cookies:
// До закрытия браузера setcookie('test-1', 'Значение 1'); // На 1 месяц setcookie('test-1', 'Значение 1', strtotime('+30 days'));
Пример установки массива в cookies:
setcookie('test-2[0]', 'Значение 1'); setcookie('test-2[1]', 'Значение 2'); setcookie('test-2[2]', 'Значение 3');
или
$array = array( 'Значение 1', 'Значение 2', 'Значение 3', ); foreach ($array as $i => $row)
Альтернативная вариант доступен с PHP 7.3.0:
setcookie($name, $value, $options);
Где $options массив, который может содержать любой из ключей: expires , path , domain , secure , httponly и samesite .
Значение элемента samesite может быть либо None , Lax или Strict .
setcookie('test-1', 'Значение 1', array( 'expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'None' ));
Чтение cookies
После передачи клиенту cookie станут доступны через глобальный массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в массиве $_REQUEST .
Например, вывести одно конкретное значение cookie:
Вывести массив:
Array ( [0] => Значение 1 [1] => Значение 2 [2] => Значение 3 )
Удаление cookies
Чтобы удалить cookies достаточно в setcookie() , в аргументе $expires указать какое-либо прошедшее время. Например 1 час:
setcookie('test-1', '', time() - 3600);
Удалить все cookie
if (isset($_SERVER['HTTP_COOKIE'])) < $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) < $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time() - 3600); >>
PHP Cookie — практические примеры использования
Привет, друзья. Пришло время поговорить о том, что такое PHP cookie, как их установить, удалить, перезаписать и где они используются. Этот урок для начинающих и полных чайников в программировании, поэтому буду показывать на конкретных практических примерах. Итак, что же такое куки в PHP? Это один из способов хранения определенных данных на стороне клиента. Если говорить проще, то куки хранятся в браузере пользователя. Например при авторизации. Когда юзер отправляет данные, они сохраняются на устройстве. Теперь давайте ближе к делу или сразу к видео
Как установить куки в PHP
Все не так сложно, как может показаться. Установка cookie происходит следующим образом:
Это базовые значения, которые обязательны для заполнения. Но параметров гораздо больше, а именно 7! Семь, Карл! И вот для чего каждый из них нужен.
1 | Name | Название (имя) cookie |
2 | Value | Значение (как правило переменная) |
3 | Expires | Время жизни куки |
4 | Path | Путь для которого будут сохранены куки |
5 | Domain | Можно указать поддомен (‘.domain.ru’) |
6 | Secure | Использование только на HTTPS (true или false) |
7 | HttpOnly | Использование только на HTTP (true или false) |
В подавляющем большинстве случаев используются первые 3 параметра чтобы записать cookie в PHP. То есть имя, значение и время жизни. Этого вполне достаточно для полноценной работы. Давайте к практике.
Здесь я установил cookie name со значением — 5, которая удалится через 1 минуту.
Как получить, прочитать, проверить cookie в PHP
В этом нам поможет глобальный массив COOKIE. Чтобы получить значение куки нам нужно вызвать ее по имени.
Как вы уже догадались, на экран выведется пятерка. Теперь сделаем проверку. Если данная кука была установлена, то выедем одно сообщение, если не была, то другое.
if(isset($_COOKIE['name'])){ echo 'Куки успешно установлены!'; }else{ echo 'Куки НЕ установлены!'; }
Есть один маленький нюанс. При первом заходе на страницу будет выведено сообщение, что куки не установлены, однако, если заглянуть в консоль браузера, то увидим, что она там есть. В чем же дело? Элементарно. Дело в том, что запрос на проверку и сама установка куки идут ОДНОВРЕМЕННО. Поэтому сообщение об успешной установке мы увидим только после следующей перезагрузке страницы.
Теперь у нас есть условие и его можно использовать в некоторых случаях.
Авторизация с использованием PHP Cookie
Для примера я создам 2 формы. Первая с одним единственным полем, в которое будем писать свое имя. Пока не будет введено и отправлено имя, пользователю будут недоступны некоторые элементы страницы. То есть, если он не авторизован, то какие-то функции сайта от него будут скрыты, а так же показано приветствие. После того, как данные с формы будут отправлены, эта форма будет скрыта и показана другая, которая просто будет запоминать все данные, введенные пользователем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
div class="container"> div class="row"> div class="col-md-12"> ?=$head ?> ?=$head_two ?> div> div> div class="row"> div class="col-md-12"> div class="col"> ?=$val1_c ?>div> div class="col"> ?=$val1_c ?>div> div> div> div class="row"> div class="col-md-4 col-sm-12"> ?=$form?> ?=$form2?> div> div> div>
Теперь осталось в HTML вставить нужные переменные.
$count = 0; if (isset($_COOKIE['count'])) { $count = $_COOKIE['count']; $count++; } setcookie('count', $count);
Счетчик просмотров страницы на PHP + cookie
недавно я публиковал материал на тему создания счетчика просмотров страниц. Но там он считает общее количество просмотров всеми посетителями. Здесь же мы сделаем некую индивидуальность и покажем сколько раз каждый их юзеров был на этой странице. Благо делается он очень просто. Вот его код:
setcookie('name', ''); setcookie('name', '$value', time()-86400);
setcookie(‘name’, »); setcookie(‘name’, ‘$value’, time()-86400);
Потом просто выводим на странице переменную count. Протестировать и посмотреть пример работы PHP cookie можно на этой странице:
Время жизни cookie в PHP
Если не указан третий параметр (Expires), то куки будут храниться до окончания сессии, то есть пока вы не закроете браузер. Но можно выставить и другие временные рамки, к примеру на 1 час или на 1 день и т. д. Вот некоторые примеры:
- time()+3600 — один час
- time()+86400 — один день
- time()+86400 * 30 — 30 дней
- time()+86400 * 30 * 12 — 1 год
Этого вполне достаточно, но многие интересуются, как сделать так, чтобы куки жили вечно или сделать время жизни бесконечным. Не очень понимаю в каких случаях это может понадобиться, однако ответ на этот вопрос будет — НЕТ, нельзя. Но можно поставить максимальное время. Пишется так: 0x7FFFFFFF — дата 19.01.2038 года.
Как удалить или очистить (unset) куки в PHP
Удаление куки в PHP можно сделать двумя способами. Оставить значение пустым или установить прошедшую дату, со знаком минус:
setcookie('name', ''); setcookie('name', '$value', time()-86400);
setcookie(‘name’, »); setcookie(‘name’, ‘$value’, time()-86400);
Надеюсь это руководство было максимально понятным и исчерпывающим. Если вам есть что добавить по этой теме или у вас не работают cookie в PHP, то напишите об этом в комментариях, будем разбираться вместе. Так же можете скачать пример из этой статьи и попрактиковаться самостоятельно.