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