먼저 관련 쿠키의 메커니즘을 살펴보겠습니다.
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", ''); 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'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 중국어 웹사이트의 기타 관련 기사를 참조하세요!