를 호출 한 직후 쿠키 값에 액세스하려면 setcookie()
을 사용할 수 없습니다 $_COOKIE
. 그 이유는 프로토콜의 특성 때문입니다 ( https://tools.ietf.org/html/rfc6265 참조 ). 사용할 때 setcookie()
나머지 HTTP 헤더와 함께 클라이언트 로 보낼 쿠키를 정의합니다 ( http://php.net/manual/en/function.setcookie.php 참조 ). 그러나 $_COOKIE
반면 에 클라이언트 ( http://php.net/manual/en/reserved.variables.cookies.php ) 에서 HTTP 쿠키 를 통해 현재 스크립트로 전달 된 변수가 포함되어 있습니다 .
$_COOKIE
전화 후 변경하면 setcookie()
-여기에 일부 답변이 권장되는 것처럼-더 이상 클라이언트의 쿠키 만 포함되지 않습니다. 이로 인해 애플리케이션에 사용 된 제 3 자 코드의 가정을 방해 할 수 있으며 원치 않는 사이트 효과가 발생할 수 있습니다. 따라서 일반적으로 좋은 습관이 아니며 호출이 setcookie()
자체 코드의 일부인 경우에만 옵션 입니다.
setcookie()
동일한 요청 내에서 값을 설정하는 깨끗하고 투명한 방법 은 다음을 사용하는 것입니다 headers_list()
( http://php.net/manual/en/function.headers-list.php 참조 ) .
function getcookie($name) {
$cookies = [];
$headers = headers_list();
foreach($headers as $header) {
if (strpos($header, 'Set-Cookie: ') === 0) {
$value = str_replace('&', urlencode('&'), substr($header, 12));
parse_str(current(explode(';', $value, 1)), $pair);
$cookies = array_merge_recursive($cookies, $pair);
}
}
return $cookies[$name];
}
setcookie('uname', $uname, time() + 60 * 30);
echo "Cookie value: " . getcookie('uname');
그러나 이것은 PHP CLI (예 : PHPUnit)에서는 작동하지 않습니다. 이러한 경우 XDebug와 같은 타사 확장을 사용할 수 있습니다 ( http://xdebug.org/docs/all_functions#xdebug_get_headers 참조 ).