gpt4 book ai didi

php - 如何从 ESI :include script? 中设置 cookie

转载 作者:可可西里 更新时间:2023-11-01 12:31:36 28 4
gpt4 key购买 nike

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

最佳答案

一个有趣的问题,之前有人问过但没有回答(Setting Cookies via ESI:include, how?)。我不认为你可以这样做。使用 ESI-include,ESI 处理器发出单独的请求并替换正文中的一部分,而不是 header 。为了使您首选的 set-cookie 行为正常工作,ESI 规范应指定如何“合并”所有 set-cookie header 。

参见 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 header 吗?这可以包含在正文中...

关于php - 如何从 ESI :include script? 中设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379037/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com