Pregunta

Tengo una página de PHP básica que se está cargando a través de barniz con un solo ESI que incluye que vuelva al servidor para establecer una cookie. La cookie está configurada con acceso al dominio y similares, pero cuando se llama a través de ESI, la cookie nunca se establece. Si accede a la ruta de incluido ESI directamente, la cookie está configurada sin ningún problema. Incluso he configurado mi configuración de barniz para nunca almacenar en caché, pensando que el VCL podría estar matando a la cookie.

Este...

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

... incluye esto ...

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

?>

Soy nuevo con Varnish y ESI, así que estoy empezando a preguntarme si esta es una limitación conocida (ya sea con ESI o con la implementación de ESI de Varnish), pero no puedo encontrar ninguna discusión de mi problema en línea.

¿Fue útil?

Solución

Una pregunta interesante que se ha hecho, pero no respondida antes ( Configuración de cookies a través de ESI: incluir, ¿cómo? ). No creo que puedas hacerlo de esta manera. Con ESI-Include, el procesador ESI realiza una solicitud separada y reemplaza una parte del cuerpo, no del encabezado. Para que su comportamiento de cocinero preferido funcione correctamente, la especificación de ESI debe especificar cómo 'fusionar' todos los encabezados de cocción.

Ver Capítulo seis de la especificación de ESI: http://www.w3.org/tr/esi-lang

Cuando se procesa una plantilla de ESI, se deberá realizar una solicitud por separado para cada incluido en el que se encuentre. Las implementaciones pueden usar los encabezados de la solicitud original (por ejemplo, cookies, agente de usuario, etc.) al hacerlo. Además, los encabezados de respuesta de los fragmentos (por ejemplo, el set-cookie, el servidor, el control de caché, el último modificado) pueden ignorarse y no deben influir en la página ensamblada.

¿Podría intentar convertir su encabezado de cookie en un script de cookie JavaScript? Esto podría incluirse en el cuerpo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top