ESI内からクッキーをどのように設定しますか:スクリプトを含めますか?

StackOverflow https://stackoverflow.com/questions/5379037

質問

単一のESIを使用してワニスを介してロードされている基本的なPHPページがあります。これには、Cookieを設定するためにサーバーに戻ることが含まれます。 Cookieはドメインアクセスなどで設定されますが、ESIを介して呼び出されると、Cookieが設定されません。 ESIを直接含めるESIにアクセスすると、Cookieは問題なく設定されます。 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');

?>

私はワニスとESIを使用しているので、これが既知の制限であるかどうか疑問に思い始めています(ESIまたはVarnishのESI実装のいずれか)が、オンラインで私の問題の議論は見つかりません。

役に立ちましたか?

解決

尋ねられた興味深い質問 - しかし、以前に答えられなかった - ESIを介してクッキーを設定する:含める、どのように? )。このようにできるとは思いません。 ESI Includeを使用すると、ESIプロセッサは別の要求を行い、ヘッダーではなくボディから部品を置き換えます。好みのセットクッキー動作を正しく機能させるために、ESI仕様はすべてのセットクッキーヘッダーを「マージ」する方法を指定する必要があります。

ESI仕様の第6章を参照してください。 http://www.w3.org/tr/esi-lang

ESIテンプレートが処理されている場合、遭遇することごとに個別のリクエストを作成する必要があります。実装は、その際に元のリクエストのヘッダー(例:Cookie、ユーザーエージェントなど)を使用する場合があります。さらに、フラグメントからの応答ヘッダー(たとえば、セットクッキー、サーバー、キャッシュコントロール、ラスト変更)は無視され、組み立てられたページに影響を与えないでください。

JavaScript Set-Cookieスクリプトでセットクッキーヘッダーを変換してもらえますか?これは体に含めることができます...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top