2012-02-03 2 views
0

짐작할 수 있겠지만 ob_start()을 출력 할 필요없이 PHP에서 쿠키를 설정할 수있는 방법이 있습니까?ob_start없이 출력 후 쿠키 설정

내 문제는 다른 사람들과 마찬가지로 쿠키를 설정해야하는 클래스를 개발하고 있다는 것입니다. 이제는 "출력을 만들기 전에 클래스의 새로운 인스턴스를 만들어야합니다"라는 말을 사용하는 사람에게 말할 수 없습니다. 그래서 나는 어떻게 든 그것을 뺄 수 있습니까?

+0

왜 출력하기 전에 쿠키를 설정하는 것이 왜 안 좋습니까? – Josh

+0

코드를 작성하는 것이 그렇게 어렵지는 않습니다. 다른 개발자가 자신의 클래스를 사용하기를 원하기 때문에 그렇게하는 것은 절름발입니다. –

+2

클래스가 Set-Cookie와 같은 HTTP 헤더를 전송할 책임이 있음을 문서화 한 경우 출력을 보내기 전에 사용해야한다고 말하는 데는 아무런 문제가 없습니다. 예를 들어,'setcookie' 문서가 정확히 말하는 것입니다. –

답변

2

Headers already sent by PHP

전문가가 아닌 해결 방법을 적용 나열된 참조하십시오. 특히 :

<META HTTP-EQUIV="Set-Cookie" 
CONTENT="cookievalue=xy;expires=Friday, 14-Dec-12 12:12:12 GMT; path=/"> 

또는 를 사용하고 document.cookie을 설정합니다.

2

수 없습니다. 쿠키는 헤더의 일부로 전송되므로 이미 본문을 보낸 경우 너무 늦었습니다. 출력 버퍼링이 해결책입니다.

아마도 세션 변수를 사용할 수 있습니다.

+0

쿠키를 설정할 수없는 경우에만 그렇게 할 것입니다. 감사합니다.이 역시 좋은 제안입니다. –

1

이것은 내 workround이며 나를 위해 잘 작동합니다.

// Force set cookie now 
$_COOKIE['ref_url'] = $_SERVER['HTTP_REFERER']; 

// Set cookie after refresh site 
setcookie('ref_url', $_SERVER['HTTP_REFERER'], Affiliate::$cookieTime); 

// Diplay $_COOKIE 
var_dump($_COOKIE['ref_url']); 
+0

$ _SERVER [ 'HTTP_REFERER']가 비어있는 경우가 있으므로 사용하기 전에 먼저 테스트하십시오. $ url_referrer = empty ($ _ SERVER [ 'HTTP_REFERER'])? '': $ _ SERVER [ 'HTTP_REFERER']; – fedmich