Мне интересно, могу ли я удалить файлы cookie моего веб-сайта, когда пользователь нажимает на выход из системы, потому что я использовал это как функцию для удаления файлов cookie, но он не работает должным образом:
setcookie("user",false);
Есть ли способ удалить файлы cookie одного домена в PHP?
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, '/'); } }
$past = time() - 3600; foreach ( $_COOKIE as $key => $value ) { setcookie( $key, $value, $past, '/' ); }
Тем не менее, даже лучше запомнить (или хранить его где-нибудь), какие файлы cookie устанавливаются с вашим приложением в домене и удалять все это напрямую.
Таким образом, вы можете быть уверены, что все значения будут правильно удалены.
Я согласен с некоторыми из приведенных выше ответов. Я бы просто рекомендовал заменить «time () – 1000» на «1». Значение «1» означает 1 января 1970 года, что гарантирует истечение 100%. Следовательно:
setcookie($name, '', 1); setcookie($name, '', 1, '/');
убедитесь, что вы вызываете функцию setcookie, прежде чем какой-либо выход произойдет на вашем сайте.
также, если ваши пользователи выходят из системы, вы также должны удалить / аннулировать свои переменные сеанса.
Когда вы меняете имя своего 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-ответа
Вы должны знать о различных инструментах отслеживания, таких как 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.
Все предыдущие ответы упускают из виду, что setcookie
можно было использовать с явным доменом. Кроме того, файл cookie может быть установлен на более высокий субдомен, например, если вы foo.bar.tar.com
домене foo.bar.tar.com
, на foo.bar.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); }
Используйте функцию очистки файлов 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
, в противном случае данные сеанса сохранятся.