[php] PHP에서 내 웹 사이트의 모든 쿠키를 삭제하는 방법

사용자가 로그 아웃을 클릭 할 때 내 웹 사이트의 쿠키를 모두 삭제할 수 있는지 궁금합니다.이 기능을 사용하여 쿠키를 삭제했지만 제대로 작동하지 않기 때문입니다.

setcookie("user",false);

PHP에서 한 도메인의 쿠키를 삭제하는 방법이 있습니까?



답변

PHP setcookie ()

해당 페이지에서 가져 오면 도메인에 대한 모든 쿠키가 설정 해제됩니다.

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


답변

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

그러나 더 좋은 방법은 도메인에서 응용 프로그램과 함께 설정된 쿠키를 기억 (또는 어딘가에 저장)하고 모든 쿠키를 직접 삭제하는 것입니다.
이렇게하면 모든 값을 올바르게 삭제할 수 있습니다.


답변

위 답변 중 일부에 동의합니다. “time ()-1000″을 “1”로 바꾸는 것이 좋습니다. 값 “1”은 1970 년 1 월 1 일을 의미하며 100 % 만기를 보장합니다. 따라서:

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


답변

사이트에서 출력이 발생하기 전에 setcookie 함수를 호출해야합니다.

또한 사용자가 로그 아웃하는 경우 세션 변수도 삭제 / 무효화해야합니다.


답변

쿠키의 이름을 변경할 때 모든 쿠키를 삭제하고 하나는 보존 할 수도 있습니다.

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를 기반으로


답변

제공된 답변으로 문제가 해결되지 않았습니다.

그렇지 않았습니다.

  1. 상위 도메인 쿠키 제거 (abc에서, bc 제거, 쿠키),
  2. 루트가 아닌 상위 경로에서 쿠키를 제거하십시오.

내 스크립트는 그렇습니다.

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

가장 예쁘고 / 안전하고 / 최적의 솔루션은 아니므로 쿠키 경로 및 / 또는 쿠키 도메인을 모르는 경우에만이 방법을 사용하십시오. 또는 버전을 만들기 위해 아이디어를 사용하십시오.


답변

Google Analytics와 같은 다양한 추적 도구도 도메인에서 쿠키를 사용하며 GA에 올바른 데이터를 유지하려는 경우 쿠키를 삭제하지 않으려는 점을 알고 있어야합니다.

내가 일할 수있는 유일한 해결책은 기존 쿠키를 null로 설정하는 것입니다. 클라이언트에서 쿠키를 삭제할 수 없습니다.

따라서 사용자를 로그 아웃하려면 다음을 사용합니다.

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

물론 이것이 모든 쿠키를 삭제하는 것은 아닙니다.