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