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.
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 ...
Tags und Links php cookies varnish edge-side-includes