2011-03-21 3 views
8

기본 ESI가 포함 된 Varnish를 통해로드되는 기본 PHP 페이지가 쿠키를 설정하기 위해 서버에 다시 호출됩니다. 쿠키는 도메인 액세스 등으로 설정되지만 ESI를 통해 호출되면 쿠키가 설정되지 않습니다. ESI include 경로에 직접 액세스하면 쿠키는 아무 문제없이 설정됩니다. 나는 심지어 VCL이 쿠키를 죽일 수 있다고 생각하면서 아무것도 캐시하지 않도록 내 Varnish 구성을 설정했습니다.ESI : include 스크립트에서 쿠키를 어떻게 설정합니까?

<esi:include src="/init.php?<?=http_build_query($_GET); ?>"></esi:include> 

가 ...이 포함되어

이 ... ...

<?php 
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 

setcookie('superman', 'clark kent', 0, '/', '.whatever.com'); 

?> 

나는 광택 및 ESI 새로운 해요, 그래서이는 경우 궁금해하기 시작 해요 (ESI 또는 Varnish의 ESI 구현과 관련하여) 알려진 제한 사항이 있지만 온라인에서 문제점을 논의 할 수는 없습니다.

답변

13

전에 묻은 흥미로운 질문이지만 대답 전 (Setting Cookies via ESI:include, how?). 나는 네가 그렇게 할 수 있다고 생각하지 않는다. ESI-include를 사용하면 ESI 프로세서가 별도의 요청을 만들어 헤더가 아닌 본문의 일부를 대체합니다. 여러분이 선호하는 set-cookie 동작이 올바르게 작동하게하려면 ESI 사양은 모든 set-cookie 헤더를 '병합'하는 방법을 지정해야합니다. ESI를 스펙

보기 육장 일 : ESI 템플릿이 처리 될 때 http://www.w3.org/TR/esi-lang

하기, 별도의 요청이 필요한 각각 발생 용 포함 이루어질 수있다. 구현시 구현시 원래 요청 헤더 (예 : 쿠키, 사용자 에이전트 등)를 사용할 수 있습니다. 또한 조각 (예 : Set-Cookie, Server, 캐시 제어, 마지막으로 수정 됨)의 응답 헤더는 일 수 있으며, 조립 된 페이지 에 영향을 미치지 않아야합니다.

javascript set-cookie 스크립트에서 쿠키 헤더를 변환 해 주실 수 있습니까? 이것은 신체에 포함될 수 있습니다 ...

+0

빨아. 예, 쿠키 설정을위한 javascript 경로를 사용할 수는 있지만 여러 가지 이유로 그렇게 할 필요가 없기를 바랍니다. 해킹 할 수있는 방법을 찾으려고 노력할 것 같지만, 지금은 가능합니다. 특히 바니시 (Varnish)의 가벼운 ESI 구현의 경우에는 가능하지 않습니다. –

관련 문제