Saya bertanya-tanya apakah saya dapat menghapus semua cookie situs web saya ketika pengguna mengklik logout, karena saya menggunakan ini sebagai fungsi untuk menghapus cookie tetapi tidak berfungsi dengan benar:
setcookie("user",false);
Apakah ada cara untuk menghapus cookie satu domain di PHP?
Jawaban:
PHP setcookie ()
Diambil dari halaman itu, ini akan membatalkan semua cookie untuk domain Anda:
// 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
sumber
HTTP_COOKIE
nilai akan lebih baik daripada mengulang melalui$_COOKIE
array. Apakah Anda punya alasan untuk itu? Bagi saya ini hanya terlihat seperti lebih banyak pekerjaan (ganda) untuk parser.$past = time() - 3600; foreach ( $_COOKIE as $key => $value ) { setcookie( $key, $value, $past, '/' ); }
Namun yang lebih baik adalah mengingat (atau menyimpannya di suatu tempat) cookie mana yang disetel dengan aplikasi Anda di domain dan menghapus semuanya secara langsung.
Dengan cara itu Anda bisa yakin untuk menghapus semua nilai dengan benar.
sumber
setcookie( $key, FALSE );
?! (lihat Catatan scetion di php.net/manual/en/function.setcookie.php )/
Anda tempatkansetcookie
?/
adalah jalur cookie. Anda perlu menyetelnya agar Anda dapat menghapus cookie dari domain, jika tidak maka akan disetel ke jalur saat ini, dan hanya memengaruhi cookie yang disetel untuk jalur saat ini.Saya setuju dengan beberapa jawaban di atas. Saya hanya akan merekomendasikan mengganti "time () - 1000" dengan "1". Nilai "1" berarti 1 Januari 1970, yang memastikan kedaluwarsa 100%. Karena itu:
setcookie($name, '', 1); setcookie($name, '', 1, '/');
sumber
pastikan Anda memanggil fungsi setcookie Anda sebelum keluaran apa pun terjadi di situs Anda.
juga, jika pengguna Anda keluar, Anda juga harus menghapus / membatalkan variabel sesi mereka.
sumber
Saat Anda mengubah nama Cookies Anda, Anda mungkin juga ingin menghapus semua Cookies tetapi menyimpannya:
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, '/'); } } }
Juga berdasarkan PHP-Answer ini
sumber
Jawaban yang diberikan tidak menyelesaikan masalah saya,
Itu tidak:
Skrip saya, lihat.
<?php function unset_cookie($name) { $host = $_SERVER['HTTP_HOST']; $domain = explode(':', $host)[0]; $uri = $_SERVER['REQUEST_URI']; $uri = rtrim(explode('?', $uri)[0], '/'); if ($uri && !filter_var('file://' . $uri, FILTER_VALIDATE_URL)) { throw new Exception('invalid uri: ' . $uri); } $parts = explode('/', $uri); $cookiePath = ''; foreach ($parts as $part) { $cookiePath = '/'.ltrim($cookiePath.'/'.$part, '//'); setcookie($name, '', 1, $cookiePath); $_domain = $domain; do { setcookie($name, '', 1, $cookiePath, $_domain); } while (strpos($_domain, '.') !== false && $_domain = substr($_domain, 1 + strpos($_domain, '.'))); } }
Ini bukan solusi yang paling cantik / aman / optimal, jadi gunakan ini hanya jika Anda tidak mengetahui jalur cookie dan / atau domain cookie. Atau gunakan ide untuk membuat versi Anda.
sumber
Anda harus mengetahui berbagai alat pelacakan seperti Google Analytics juga menggunakan cookie di domain Anda dan Anda tidak ingin menghapusnya, jika Anda ingin memiliki data yang benar di GA.
Satu-satunya solusi yang dapat saya lakukan adalah mengatur cookie yang ada ke null. Saya tidak dapat menghapus cookie dari klien.
Jadi untuk mengeluarkan pengguna saya menggunakan yang berikut:
setcookie("username", null, time()+$this->seconds, "/", $this->domain, 0); setcookie("password", null, time()+$this->seconds, "/", $this->domain, 0);
Tentu saja ini tidak menghapus SEMUA cookie.
sumber
0
argumennya berarti cookie bahkan tidak dienkripsi saat transit.Semua jawaban sebelumnya telah mengabaikan bahwa
setcookie
bisa saja digunakan dengan domain eksplisit. Lebih lanjut, cookie mungkin telah disetel di subdomain yang lebih tinggi, misalnya jika Anda berada difoo.bar.tar.com
domain, mungkin ada cookie yang disetel ditar.com
. Oleh karena itu, Anda ingin menghapus cookie untuk semua domain yang mungkin telah menghapus cookie:$host = explode('.', $_SERVER['HTTP_HOST']); while ($host) { $domain = '.' . implode('.', $host); foreach ($_COOKIE as $name => $value) { setcookie($name, '', 1, '/', $domain); } array_shift($host); }
sumber
Gunakan fungsi untuk menghapus 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, '/'); } }
Jika Anda lulus
true
maka itu menghapussession
data, jika tidak, data sesi dipertahankan.sumber
Saya tahu pertanyaan ini sudah tua, tetapi ini adalah alternatif yang jauh lebih mudah:
Tetapi berhati-hatilah! Ini akan menghapus SEMUA header, termasuk Cookies, Session, dll., Seperti yang dijelaskan dalam dokumen .
sumber
<?php parse_str(http_build_query($_COOKIE),$arr); foreach ($arr as $k=>$v) { setCookie("$k","",1000,"/"); }
sumber