먼저 관련 쿠키의 메커니즘을 살펴보겠습니다.
쿠키를 삭제하려면 만료일이 과거인지 확인하여 브라우저의 삭제 메커니즘을 실행해야 합니다.
다음 예에서는 방금 설정한 쿠키를 삭제하는 방법을 보여줍니다.
쿠키를 삭제하는 방법은 쿠키의 유효기간을 현재 시간 이전으로 설정하는 것인데, 이는 거의 모든 PHP 프로그래머들이 하는 작업입니다.
나중에 PHP를 처음 접하는 친구가 프로그램에서 쿠키의 값을 비우도록 설정하고 싶었는데 쿠키가 바로 삭제되었다고 하더군요. 당시 첫 반응이 믿기지 않는다는 반응이라 테스트해봤습니다
잠시 후:
결과적으로 $_COOKIE['testcookie']뿐만 아니라 전체 $_COOKIE 배열이 비어 있게 됩니다. 그래서 Winsock을 사용하여 패킷을 캡처하고 반환된 http 헤더를 관찰한 결과 http 헤더가 "Set-Cookie: testcookie=deleted; 만료=Mon, 18-Jun-2007 02:42:33 GMT"로 나타났습니다. 이는 "setcookie("testcookie ", '');"를 의미하며 실제로 쿠키 testcookie를 직접 삭제하며 PHP 매뉴얼에는 이 상황에 대한 설명이 전혀 없습니다.
드디어 PHP 소스 코드를 읽고 마침내 진실을 찾았습니다. (이것이 오픈 소스의 장점입니다. 불분명한 내부 스토리가 있으면 소스 코드를 직접 확인하세요.)
다음 코드는 php5.20의 Linux 소스 패키지에 있는 ext/standard/head.c의 99행 근처에서 찾을 수 있습니다.
소스 코드에는 "if (value && value_len == 0)"이 명확하게 표시되어 있습니다. "value_len"이 0인 경우 "sprintf(cookie, "Set-Cookie: %s=deleted; 만료=%s", name, dt);"는 쿠키를 삭제하기 위해 http 헤더를 브라우저로 보냅니다.
마지막으로 결론을 내릴 수 있습니다. PHP에서 "setcookie($cookiename, '');" 또는 "setcookie($cookiename, NULL);"을 사용하면 쿠키가 삭제되지만 물론 그러한 매뉴얼은 없습니다.
아주 간단하지 않나요? 때로는 PHP 소스 코드를 주의 깊게 읽어야 할 때도 있습니다.