Как установить файл cookie из ESI: включить скрипт?
-
28-10-2019 - |
Вопрос
У меня есть базовая страница PHP, загружаемую через лак с одним ESI, включает в себя вызовы на сервер для установки файла cookie. Cookie установлен с доменным доступом и тому подобным, но когда вы называете через ESI, файл cookie никогда не устанавливается. Если вы получаете доступ к ESI, включите путь напрямую, файл cookie устанавливается без проблем. Я даже установил свою конфигурацию лака, чтобы никогда не кэшировать ничего, думая, что 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');
?>
Я новичок с лаком и ESI, поэтому я начинаю задаваться вопросом, является ли это известным ограничением (либо с ESI, либо с реализацией ESI VARNISH), но я не могу найти никакого обсуждения моей проблемы в Интернете.
Решение
Интересный вопрос, на который был задан - но не отвечал - раньше ( Настройка файлов cookie через ESI: включить, как? ) Я не думаю, что вы можете сделать это так. С помощью ESI-INCLUDE процессор ESI делает отдельный запрос и заменяет часть от тела, а не за заголовком. Чтобы ваше предпочтительное поведение работало правильно работать, спецификация ESI должна указать, как «объединить» все заголовки Set-Cookie.
См. Главу шестой спецификации ESI: http://www.w3.org/tr/esi-lang
Когда шаблон ESI обрабатывается, необходимо будет предпринять отдельный запрос для каждого включения. Реализации могут использовать заголовки исходного запроса (например, cookie, пользователь-агент и т. Д.) При этом. Кроме того, заголовки ответов из фрагментов (например, Set-Cookie, Server, Cache-Control, Last-Modified) могут быть проигнорированы и не должны влиять на собранную страницу.
Не могли бы вы попытаться преобразовать свой заголовок Set-Cookie в сценарию JavaScript Set-Cookie? Это может быть включено в тело ...