簡體   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