Hướng dẫn php delete all cookies - php xóa tất cả cookie

Tôi đang tự hỏi nếu tôi có thể xóa tất cả các cookie của trang web của mình khi người dùng nhấp vào Đăng xuất, bởi vì tôi đã sử dụng chức năng này để xóa cookie nhưng nó không hoạt động đúng:

setcookie("user",false);

Có cách nào để xóa cookie của một tên miền trong PHP không?

Hướng dẫn php delete all cookies - php xóa tất cả cookie

Totymedli

27.7K20 Huy hiệu vàng129 Huy hiệu bạc160 Huy hiệu đồng20 gold badges129 silver badges160 bronze badges

hỏi ngày 22 tháng 2 năm 2010 lúc 11:34Feb 22, 2010 at 11:34

Hướng dẫn php delete all cookies - php xóa tất cả cookie

Mac Taylormac TaylorMac Taylor

4.91214 Huy hiệu vàng49 Huy hiệu bạc72 Huy hiệu đồng14 gold badges49 silver badges72 bronze badges

1

PHP setCookie ()

Được lấy từ trang đó, điều này sẽ hủy tất cả các cookie cho miền của bạn:

// 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

Đã trả lời ngày 22 tháng 2 năm 2010 lúc 11:40Feb 22, 2010 at 11:40

9

$past = time() - 3600;
foreach ( $_COOKIE as $key => $value )
{
    setcookie( $key, $value, $past, '/' );
}

Tuy nhiên, thậm chí còn tốt hơn là nhớ (hoặc lưu trữ nó ở đâu đó) mà cookie được đặt với ứng dụng của bạn trên một tên miền và xóa tất cả những thứ đó trực tiếp. Bằng cách đó, bạn có thể chắc chắn xóa tất cả các giá trị một cách chính xác.
That way you can be sure to delete all values correctly.

Đã trả lời ngày 22 tháng 2 năm 2010 lúc 11:41Feb 22, 2010 at 11:41

chọc chọcpoke

352K68 Huy hiệu vàng544 Huy hiệu bạc590 Huy hiệu Đồng68 gold badges544 silver badges590 bronze badges

9

Tôi đồng ý với một số câu trả lời trên. Tôi chỉ khuyên bạn nên thay thế "Time ()-1000" bằng "1". Giá trị của "1" có nghĩa là ngày 1 tháng 1 năm 1970, đảm bảo hết hạn 100%. Vì vậy:

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

Đã trả lời ngày 8 tháng 7 năm 2012 lúc 18:24Jul 8, 2012 at 18:24

DougdougDoug

4.94610 Huy hiệu vàng31 Huy hiệu bạc42 Huy hiệu đồng10 gold badges31 silver badges42 bronze badges

2

Các câu trả lời được cung cấp không giải quyết được vấn đề của tôi,

Nó đã không làm:

  1. Xóa cookie tên miền cha (từ a.b.c; loại bỏ B.C; cookie),
  2. Hủy bỏ cookie khỏi một đường dẫn cao hơn sau đó root.

Kịch bản của tôi làm, xem.

<?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, '.')));
    }
}

Đây không phải là giải pháp đẹp nhất/an toàn/tối ưu nhất, vì vậy chỉ sử dụng điều này nếu bạn không biết đường dẫn cookie và/hoặc cookie-lomain. Hoặc sử dụng ý tưởng để tạo phiên bản của bạn.

Đã trả lời ngày 22 tháng 2 năm 2018 lúc 14:56Feb 22, 2018 at 14:56

1

Hãy chắc chắn rằng bạn gọi chức năng setcookie của bạn trước khi bất kỳ đầu ra nào xảy ra trên trang web của bạn.

Ngoài ra, nếu người dùng của bạn đang đăng xuất, bạn cũng nên xóa/vô hiệu hóa các biến phiên của họ.

Đã trả lời ngày 22 tháng 2 năm 2010 lúc 11:37Feb 22, 2010 at 11:37

Hướng dẫn php delete all cookies - php xóa tất cả cookie

KNITTLKNITTLknittl

229K52 Huy hiệu vàng301 Huy hiệu bạc351 Huy hiệu Đồng52 gold badges301 silver badges351 bronze badges

Khi bạn thay đổi tên của cookie, bạn cũng có thể muốn xóa tất cả các cookie nhưng bảo quản một 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, '/');
        }
    }
}

Cũng dựa trên câu trả lời PHP này

Đã trả lời ngày 31 tháng 1 năm 2014 lúc 14:56Jan 31, 2014 at 14:56

Roman Holznerroman HolznerRoman Holzner

5.5582 Huy hiệu vàng21 Huy hiệu bạc31 Huy hiệu Đồng2 gold badges21 silver badges31 bronze badges

1

Bạn nên biết về các công cụ theo dõi khác nhau như Google Analytics cũng sử dụng cookie trên miền của bạn và bạn không muốn xóa chúng, nếu bạn muốn có dữ liệu chính xác trong GA.

Giải pháp duy nhất tôi có thể làm việc là đặt cookie hiện có thành NULL. Tôi không thể xóa cookie khỏi máy khách.

Vì vậy, để đăng nhập người dùng, tôi sử dụng những điều sau:

setcookie("username", null, time()+$this->seconds, "/", $this->domain, 0);
setcookie("password", null, time()+$this->seconds, "/", $this->domain, 0);

Tất nhiên điều này không xóa tất cả các cookie.

Đã trả lời ngày 24 tháng 4 năm 2010 lúc 8:52Apr 24, 2010 at 8:52

1

Tất cả các câu trả lời trước đó đã bỏ qua rằng

// 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, '/');
    }
}
2 có thể đã được sử dụng với một miền rõ ràng. Hơn nữa, cookie có thể đã được đặt trên một tên miền phụ cao hơn, ví dụ: Nếu bạn ở trên miền
// 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, '/');
    }
}
3, có thể có một cookie được đặt trên
// 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, '/');
    }
}
4. Do đó, bạn muốn bỏ cookie cho tất cả các tên miền có thể đã bỏ cookie:

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

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

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

    array_shift($host);
}

Đã trả lời ngày 12 tháng 8 năm 2014 lúc 16:35Aug 12, 2014 at 16:35

GajusgajusGajus

65.5K68 Huy hiệu vàng264 Huy hiệu bạc425 Huy hiệu Đồng68 gold badges264 silver badges425 bronze badges

Sử dụng chức năng để xóa 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, '/');
    }
}

Nếu bạn vượt qua

// 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, '/');
    }
}
5 thì nó sẽ xóa dữ liệu
// 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, '/');
    }
}
6, nếu không dữ liệu phiên được bảo tồn.

Đã trả lời ngày 14 tháng 10 năm 2017 lúc 0:47Oct 14, 2017 at 0:47

Hướng dẫn php delete all cookies - php xóa tất cả cookie

Dan Braydan BrayDan Bray

6,8603 Huy hiệu vàng50 Huy hiệu bạc66 Huy hiệu Đồng3 gold badges50 silver badges66 bronze badges

Tôi biết câu hỏi này đã cũ, nhưng đây là một sự thay thế dễ dàng hơn nhiều:

header_remove();

Nhưng hãy cẩn thận! Nó sẽ xóa tất cả các tiêu đề, bao gồm cookie, phiên, v.v., như được giải thích trong tài liệu.

Đã trả lời ngày 31 tháng 12 năm 2017 lúc 21:14Dec 31, 2017 at 21:14

Hướng dẫn php delete all cookies - php xóa tất cả cookie

BorjovskyborjovskyBorjovsky

7082 Huy hiệu vàng10 Huy hiệu bạc24 Huy hiệu đồng2 gold badges10 silver badges24 bronze badges

1

// 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, '/');
    }
}
0

Đã trả lời ngày 19 tháng 4 năm 2018 lúc 11:55Apr 19, 2018 at 11:55

Hướng dẫn php delete all cookies - php xóa tất cả cookie

Gautam Sharmagautam SharmaGautam Sharma

1961 Huy hiệu vàng2 Huy hiệu bạc11 Huy hiệu đồng1 gold badge2 silver badges11 bronze badges

1

Tôi đã phải thêm phần sau vào câu trả lời hàng đầu để thực sự loại bỏ một vài cookie sẽ không biến mất:

// 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, '/');
    }
}
1

Đã trả lời ngày 30 tháng 12 năm 2020 lúc 20:26Dec 30, 2020 at 20:26

1