2013-09-25 5 views
1

쿠키를 설정해야하는 스크립트가 있습니다. 웹 서버에서는 잘 작동하지만 로컬로 테스트 할 때는 설정되지 않습니다.setcookie()가 쿠키를 로컬로 설정하지 않습니다.

발췌 :

setcookie('sid', 'nv48thnuf39sonv', 0, '/', $_SERVER['HTTP_HOST']); 

echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 

setcookie의 호출 이전에는 출력이 없습니다.

서버의 경우 첫 번째로드에서는 (empty)이고 두 번째로드에서는 nv48thnuf39sonv (예상되는 동작)이라고 표시됩니다. 그러나 http://localhost/을 통해 (empty)이라고 말하면서 매시 시간과 관계없이 아무런 변화가 없습니다. F5

쿠키가 설정되지 않은 원인을 알고있는 사람이 있습니까?

+0

왜 당신도'필요합니까 ..., '/', $ _SERVER [ 'HTTP_HOST']) ;'기본값을 가지고 있기 때문에 생략 할 수 있습니다. – Yang

답변

0

귀하의 쿠키 도메인입니다.

두 개 이상의 점 (.)이 필요하거나 브라우저가 쿠키를 잘못 저장 한 것으로 간주하여 쿠키를 저장하지 않습니다. 주위에 얻을 수있는 가장 쉬운 방법은 $_SERVER['HTTP_HOST'] 로컬 호스트 때 단순히 null에 쿠키 도메인을 설정하는 것입니다 :

$cookieDomain = $_SERVER['HTTP_HOST'] == 'localhost' ? null : $_SERVER['HTTP_HOST']; 
setcookie('sid', 'nv48thnuf39sonv', 0, '/', $cookieDomain); 
echo isset($_COOKIE['sid']) ? $_COOKIE['sid'] : '(empty)'; 
+0

잘 작동했습니다. 이제 localhost에 대해 작동 할 쿠키 도메인을 지정하는 방법이 있습니까? 나는 현지에서 개발하고 싶고 그런 스위치에 의존 할 필요가 없다. –

+0

실제로 호스트 파일에 추가 한'dev.local'이라는 사용자 정의 도메인을 사용하여 로컬에서 해결합니다. 브라우저는 도메인이 좋지 않으면 자동으로'.'을 앞에 붙입니다. 따라서'localhost'에 도움이되지는 않지만'dev.local'은 유효한 쿠키 도메인 인'.dev.local'으로 바뀝니다. – SamT

관련 문제