Wie setzt man ein Cookie in einem ESI: include Skript?

8

Ich habe eine einfache PHP-Seite, die über Varnish mit einem einzelnen ESI-Include geladen wird, das zum Setzen eines Cookies zurück zum Server ruft. Der Cookie wird mit Domänenzugriff und ähnlichem gesetzt, aber wenn er über ESI aufgerufen wird, wird der Cookie niemals gesetzt. Wenn Sie direkt auf den ESI-Include-Pfad zugreifen, wird der Cookie ohne Probleme gesetzt. Ich habe sogar meine Varnish-Konfiguration so eingestellt, dass niemals etwas zwischengespeichert wird, weil ich dachte, die VCL könnte den Cookie töten.

Dies ...

%Vor%

... beinhaltet das ...

%Vor%

Ich bin neu mit Varnish und ESI, also frage ich mich, ob das eine bekannte Einschränkung ist (entweder mit ESI oder mit Varnishs ESI-Implementierung), aber ich kann keine Diskussion über mein Problem online finden.

    
Mike Flynn 21.03.2011, 14:28
quelle

1 Antwort

13

Eine interessante Frage, die bisher gestellt (aber nicht beantwortet) wurde ( Cookies über ESI setzen: enthalten, wie? ). Ich denke nicht, dass du es so schaffen kannst. Mit ESI-Include macht der ESI-Prozessor eine separate Anfrage und ersetzt einen Teil vom Rumpf, nicht den Header. Damit Ihr bevorzugtes Set-Cookie-Verhalten korrekt funktioniert, sollte die ESI-Spezifikation angeben, wie alle Set-Cookie-Header zusammengeführt werden.

Siehe Kapitel 6 der ESI-Spezifikation: Ссылка

  

Wenn eine ESI-Vorlage verarbeitet wird, a   separate Anfrage muss gemacht werden   für jedes gefundene Include.   Implementierungen können das Original verwenden   Header der Anfrage (z. B. Cookie,   User-Agent usw.).   Zusätzlich Antwort-Header von   Fragmente (z. B. Set-Cookie, Server,   Cache-Control, Last-Modified)   ignoriert und sollte nicht beeinflussen   zusammengestellte Seite.

Können Sie versuchen, Ihren Set-Cookie-Header in einem Javascript-Set-Cookie-Skript zu konvertieren? Dies könnte im Körper enthalten sein ...

    
ivy 21.03.2011, 15:13
quelle