>  기사  >  백엔드 개발  >  PHP는 쿠키를 삭제할 수 없습니다

PHP는 쿠키를 삭제할 수 없습니다

王林
王林원래의
2019-09-17 18:01:303831검색

PHP는 쿠키를 삭제할 수 없습니다

먼저 관련 쿠키의 메커니즘을 살펴보겠습니다.

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )

쿠키를 삭제하려면 만료 날짜가 과거인지 확인하여 브라우저의 삭제 메커니즘을 실행해야 합니다.

다음 예는 방금 설정한 쿠키를 삭제하는 방법을 보여줍니다.

<?php
//将过期时间设为一小时前
setcookie("TestCookie", "", time() - 3600);
setcookie("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
?>

쿠키를 삭제하는 방법은 쿠키의 유효 기간을 현재 시간 이전으로 설정하는 것입니다

이것은 거의 모든 PHP 프로그래머가 하는 일입니다. . 나중에 PHP를 처음 접하는 친구가 프로그램에서 쿠키의 값을 비워두도록 설정하고 싶었는데 쿠키가 바로 삭제되었다고 하더군요. 당시 내 첫 번째 반응은 믿을 수 없다는 것이었기 때문에 테스트해 보았습니다.

setcookie("testcookie", &#39;&#39;);
print_r($_COOKIE);

결과는 $_COOKIE['testcookie']뿐만 아니라 전체 $_COOKIE 배열이 비어 있다는 것입니다. 그래서 Winsock을 사용하여 패킷을 캡처하고 반환된 http 헤더를 관찰한 결과 http 헤더가 "Set-Cookie: testcookie=deleted; 만료=Mon, 18-Jun-2007 02:42:33 GMT"로 나타났습니다. 이는 "setcookie("testcookie ", '');"를 의미하며 실제로 쿠키 testcookie를 직접 삭제하며 PHP 매뉴얼에는 이 상황에 대한 설명이 전혀 없습니다.

다음 코드는 php5.20 Linux 소스 패키지의 ext/standard/head.c 99행 근처에서 찾을 수 있습니다.

if (value && value_len == 0) {
    /* 
     * MSIE doesn&#39;t delete a cookie when you set it to a null value
     * so in order to force cookies to be deleted, even on MSIE, we
     * pick an expiry date 1 year and 1 second in the past
     */
    time_t t = time(NULL) - 31536001;
    dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
    sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);
    efree(dt);
} else {
    sprintf(cookie, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
    if (expires > 0) {
        strcat(cookie, "; expires=");
        dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
        strcat(cookie, dt);
        efree(dt);
    }
}

소스 코드에 명확하게 표시되어 있습니다.“if (value && value_len == 0)”,当“value_len”为0时,“sprintf(cookie, "Set-Cookie: %s=deleted; expires=%s", name, dt);”삭제할 http 헤더를 보냅니다. 쿠키를 브라우저에 전달합니다.

마지막으로 PHP에서 "setcookie($cookiename, '');" 또는 "setcookie($cookiename, NULL);"을 사용하면 쿠키가 삭제된다는 결론을 내릴 수 있습니다.

위 내용은 참고용입니다!

추천 튜토리얼: PHP 비디오 튜토리얼

위 내용은 PHP는 쿠키를 삭제할 수 없습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.