Как установить файл cookie из сценария ESI:include?

У меня есть базовая страница PHP, загружаемая через Varnish с одним включением ESI, которое вызывает сервер для установки файла cookie. Файл cookie устанавливается с доступом к домену и т.п., но при вызове через ESI файл cookie никогда не устанавливается. Если вы обращаетесь к пути включения ESI напрямую, файл cookie устанавливается без проблем. Я даже настроил свою конфигурацию Varnish так, чтобы она никогда ничего не кэшировала, думая, что VCL может убивать cookie.

Этот...

<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');

?>

Я новичок в Varnish и ESI, поэтому я начинаю задаваться вопросом, является ли это известным ограничением (либо с ESI, либо с реализацией Varnish ESI), но я не могу найти обсуждения моей проблемы в Интернете.


person Mike Flynn    schedule 21.03.2011    source источник


Ответы (1)


Интересный вопрос, который задавали, но не ответили, ранее ( Настройка файлов cookie через ESI:include, как ?). Я не думаю, что вы можете сделать это таким образом. С ESI-include процессор ESI делает отдельный запрос и заменяет часть тела, а не заголовок. Чтобы ваше предпочтительное поведение set-cookie работало правильно, спецификация ESI должна указывать, как «объединить» все заголовки set-cookie.

См. шестую главу спецификации ESI: http://www.w3.org/TR/esi-lang

При обработке шаблона ESI для каждого обнаруженного включения необходимо будет сделать отдельный запрос. При этом реализации могут использовать заголовки исходного запроса (например, Cookie, User-Agent и т. д.). Кроме того, заголовки ответа от фрагментов (например, Set-Cookie, Server, Cache-Control, Last-Modified) могут игнорироваться и не должны влиять на собранную страницу.

Не могли бы вы попытаться преобразовать заголовок set-cookie в сценарий javascript set-cookie? Это может быть включено в тело...

person ivy    schedule 21.03.2011
comment
Сосать. Да, я мог бы пойти по маршруту javascript для установки файла cookie, но я надеялся, что мне не придется этого делать по разным причинам. Думаю, я продолжу попытки найти возможный способ взломать это, но я не уверен, что это возможно сейчас, особенно с легкой реализацией ESI в Varnish. - person Mike Flynn; 21.03.2011