PHP 쿠키 존재 여부 확인의 한계
PHP 공식 매뉴얼에 따르면, setcookie() 함수로 쿠키를 설정한 직후에는 해당 쿠키의 존재 여부를 즉시 확인할 수 없습니다.
매뉴얼에는 이렇게 설명되어 있습니다. "쿠키가 설정되면, 다음 페이지가 로드될 때 $_COOKIE 또는 $HTTP_COOKIE_VARS 배열을 통해 접근할 수 있습니다."
쿠키가 즉시 사용할 수 없는 이유
그 이유는 쿠키가 브라우저로 전송되는 응답 헤더(response header)이기 때문입니다. 브라우저는 응답을 받은 후, 그다음 요청 시에야 해당 쿠키를 서버로 다시 전송합니다.
따라서 setcookie()로 방금 설정한 쿠키는 두 번째 페이지 로드부터 $_COOKIE 배열에서 확인할 수 있으며, 같은 요청 내에서는 바로 사용할 수 없습니다.
실용적인 해결 방법(Workaround)
하지만 간단한 우회 방법으로 이 문제를 해결할 수 있습니다. setcookie() 함수를 호출하는 동시에 $_COOKIE 배열에 직접 값을 할당하면, 현재 페이지에서도 곧바로 쿠키 값을 사용할 수 있습니다.
if(!isset($_COOKIE['lg'])) {
setcookie('lg', 'ro');
$_COOKIE['lg'] = 'ro';
}
echo $_COOKIE['lg'];코드 동작 방식
- isset($_COOKIE['lg']) — 'lg'라는 이름의 쿠키가 이미 존재하는지 확인합니다.
- setcookie('lg', 'ro') — 쿠키가 없다면 실제 쿠키를 생성하여 브라우저로 전송합니다.
- $_COOKIE['lg'] = 'ro' — 현재 요청에서도 즉시 사용할 수 있도록 $_COOKIE 배열에 수동으로 값을 할당합니다.
이 패턴은 언어 설정, 테마 선택 등 첫 방문 시 즉시 적용해야 하는 사용자 환경설정을 처리할 때 특히 유용합니다.