繁体   English   中英

如何在ESI中设置cookie:include脚本?

[英]How do you set a cookie from within an ESI:include script?

我有一个基本的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实现),但我在网上找不到任何关于我的问题的讨论。

一个有趣的问题,但之前没有回答过( 通过ESI设置Cookies:包括,如何? )。 我认为你不能这样做。 使用ESI-include,ESI处理器会发出单独的请求,并从主体而不是标头中替换部件。 为了使您首选的set-cookie行为正常工作,ESI规范应指定如何“合并”所有set-cookie标头。

参见ESI规范的第六章: http//www.w3.org/TR/esi-lang

处理ESI模板时,需要为遇到的每个包含单独的请求。 在执行此操作时,实现可以使用原始请求的标头(例如,Cookie,用户代理等)。 另外,可以忽略来自片段的响应头(例如,Set-Cookie,Server,Cache-Control,Last-Modified),并且不应该影响组装的页面。

你能尝试在javascript set-cookie脚本中转换你的set-cookie标头吗? 这可以包括在身体里......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM