[英]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.