我有一个基本的
PHP页面通过Varnish加载,其中包含一个ESI回调服务器来设置cookie. cookie是通过域访问等设置的,但是当通过ESI调用时,cookie永远不会被设置.如果直接访问ESI include路径,则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','/','.whatever.com'); ?>
我是Varnish和ESI的新手,所以我开始怀疑这是否是一个已知的限制(使用ESI或使用Varnish的ESI实现),但我无法在网上找到任何关于我的问题的讨论.
一个有趣的问题,在(
Setting Cookies via ESI:include,how?)之前被问过但没有回答过.我认为你不能这样做.通过ESI-include,ESI处理器发出单独的请求,并从主体而不是标头中替换部件.为了使您首选的set-cookie行为正常工作,ESI规范应指定如何“合并”所有set-cookie标头.
原文链接:https://www.f2er.com/php/137668.html参见ESI规范的第六章:http://www.w3.org/TR/esi-lang
When an ESI template is processed,a
separate request will need to be made
for each include encountered.
Implementations may use the original
request’s headers (e.g.,Cookie,
User-Agent,etc.) when doing so.
Additionally,response headers from
fragments (e.g.,Set-Cookie,Server,
Cache-Control,Last-Modified) may be
ignored,and should not influence the
assembled page.
您可以尝试在javascript set-cookie脚本中转换set-cookie标头吗?这可以包括在身体里……