Pertanyaan cara menghapus semua cookie situs web saya di php


Saya ingin tahu apakah saya dapat menghapus semua cookie situs web saya ketika pengguna mengeklik logout, karena saya menggunakan ini sebagai fungsi untuk menghapus cookie tetapi tidak berfungsi dengan baik:

setcookie("user",false);

Apakah ada cara untuk menghapus cookie satu domain di PHP?


82
2018-02-22 11:34


asal


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


147
2018-02-22 11:40



$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 semua itu secara langsung.
Dengan cara itu Anda dapat yakin untuk menghapus semua nilai dengan benar.


40
2018-02-22 11:41



Saya setuju dengan beberapa jawaban di atas. Saya hanya akan merekomendasikan mengganti "waktu () - 1000" dengan "1". Nilai "1" berarti 1 Januari 1970, yang memastikan kedaluwarsa 100%. Karena itu:

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

13
2017-07-08 18:24



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.


3
2018-02-22 11:37



Ketika Anda mengubah nama Cookies Anda, Anda juga mungkin ingin menghapus semua Cookies tetapi simpan satu:

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 ini PHP-Answer


2
2018-01-31 14:56



Anda harus menyadari berbagai alat pelacak 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 bisa saya dapatkan adalah mengatur cookie yang ada menjadi nol. Saya tidak bisa 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.


1
2018-04-24 08:52



Saya tahu pertanyaan ini sudah tua, tetapi ini adalah alternatif yang jauh lebih mudah:

header_remove();

Tetapi berhati-hatilah! Ini akan menghapus SEMUA header, termasuk Cookie, Sesi, dll., Seperti yang dijelaskan di dokumen.


1
2017-12-31 21:14



Semua jawaban sebelumnya telah mengabaikan bahwa setcookie bisa digunakan dengan domain eksplisit. Lebih lanjut, cookie mungkin telah ditetapkan pada subdomain yang lebih tinggi, mis. jika Anda berada di foo.bar.tar.com domain, mungkin ada cookie yang diaktifkan tar.com. Oleh karena itu, Anda ingin membatalkan cookie untuk semua domain yang mungkin telah menjatuhkan cookie:

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

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

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

    array_shift($host);
}

0
2017-08-12 16:35



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 bersih session data, jika tidak, data sesi dipertahankan.


0
2017-10-14 00:47



Jawaban yang diberikan tidak menyelesaikan masalah saya,

Itu tidak:

  1. Hapus cookie domain induk (dari a.b.c; hapus b.c; cookie),
  2. Hapus cookie dari jalur yang lebih tinggi lainnya lalu root.

Skrip saya tidak, 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 cookie-path dan / atau cookie-domain. Atau gunakan ide untuk membuat versi Anda.


0
2018-02-22 14:56



<?php
      parse_str(http_build_query($_COOKIE),$arr);
      foreach ($arr as $k=>$v) {
        setCookie("$k","",1000,"/");
      }

-1
2018-04-19 11:55