Mehrere Cookies für CUSTOMER_SEGMENT_IDS bei der Bestellung

7

Während des Ajax-Aufrufs zum Absenden der Bestellung beim einseitigen Bestellvorgang wird mehrmals das Cookie "CUSTOMER_SEGMENT_IDS" mit dem Wert "Gelöscht" angezeigt. Dies führt dazu, dass die Headergröße weit über das zulässige Limit hinausgeht (in einigen Szenarien mehr als 8 KB) und somit Fehler bei der Bestellung verursacht werden. Dies geschieht nur für Kunden, die mehr als 4 Adressen in ihrem Adressbuch haben.

Ich habe es an der Stelle gefunden, Enterprise_PageCache_Model_Observeran der dieses Cookie durch den Magento-Kerncode gesetzt wird. Für den Umgang mit Cookies oder Kundensegmenten sind keine Anpassungen im Geschäft vorhanden.

Ich plane, diese Klasse neu zu schreiben, um alle "gelöschten" Cookies vollständig aus der Antwort zu entfernen. Gibt es einen Nachteil dieses Ansatzes, den ich beachten sollte? Alles, was ich ähnlich finden konnte, ist diese Frage: Mehrere Cookies in Ajax rufen auf, aber diese Frage enthält keine Aktivität.

Hat noch jemand dieses Problem früher erlebt? Gibt es einen bestimmten Grund für dieses Verhalten in der Magento-Codebasis?

Prateek
quelle
Konnten Sie das lösen?
TylersSN

Antworten:

1

Magento 1.x EE FPC speichert die gesamte Seite im Cache. Es gibt jedoch einige Abschnitte auf der Seite, die während der Customer Journey neu erstellt werden müssen. Wenn Sie beispielsweise ein Produkt in den Warenkorb legen, sollte der Minicart aktualisiert werden.

Es macht keinen Sinn, FPC zu haben, wenn wir den gesamten Cache jedes Mal ungültig machen, wenn der Kunde ein Produkt in den Warenkorb legt. Da der Warenkorb auf allen Seiten sichtbar ist, müssen wir den gesamten Cache leeren, um den aktualisierten Warenkorb zu sehen.

Um dieses Problem zu beheben, haben sie Cache-Container eingeführt. Sie finden diese Container unter app/code/core/Enterprise/PageCache/Model/Container.

Dadurch wird der spezifische Abschnitt der Seite neu erstellt, indem die Cache-ID überprüft wird. Die ID kann eine Kombination aus mehreren Variablen, Cookies und Konstanten sein. Der Zweck dieser ID besteht darin, den Abschnittscache bei Bedarf ungültig zu machen.

Z.B

Wenn Sie überprüfen, wird Enterprise_PageCache_Model_Container_Minicartdie Cache-ID mit der folgenden Methode generiert

public static function getCacheId()
    {
        $cookieCart = Enterprise_PageCache_Model_Cookie::COOKIE_CART;
        $cookieCustomer = Enterprise_PageCache_Model_Cookie::COOKIE_CUSTOMER;
        return md5(Enterprise_PageCache_Model_Container_Advanced_Quote::CACHE_TAG_PREFIX
            . (array_key_exists($cookieCart, $_COOKIE) ? $_COOKIE[$cookieCart] : '')
            . (array_key_exists($cookieCustomer, $_COOKIE) ? $_COOKIE[$cookieCustomer] : ''));
    }

Jedes Mal, wenn das Zitat aktualisiert wird, wird diese Cache-ID aus dem Cache gelöscht. Enterprise_PageCache_Model_Observer::registerQuoteChange. Bei der nächsten sofortigen Anforderung kann das System den Inhalt dieser Cache-ID nicht finden. So wird der Inhalt neu generiert und im Cache gespeichert.Enterprise_PageCache_Model_Container_Minicart::_renderBlock

Das Cookie CUSTOMER_SEGMENT_IDS wird im Enterprise_PageCache_Model_Container_BannerContainer verwendet. Banner können basierend auf Kundensegmenten angezeigt werden. Kundensegmente können unter verschiedenen Bedingungen einschließlich Kundenadressvariablen erstellt werden. Die Länge dieses Cookies hängt von den Kundensegmenten ab.

Der Zweck dieses Cookies besteht darin, die Cache-Abschnitte ungültig zu machen und Banner basierend auf Kundensegmenten anzuzeigen. Wenn Sie diese Funktion nicht verwenden, können Sie sie entfernen. Die empfohlene Lösung besteht darin, die Headergröße vom Server zu erhöhen.

Hoffe das hilft!

BG Kavinga
quelle
Vielen Dank für die Eingaben Kavinga, aber ich habe hier nicht mit Caching und Bannern zu tun. Es ist der standardmäßige einseitige Checkout-Prozess, daher sollte FPC hier nicht funktionieren. Cookies werden als Antwort auf den letzten Ajax-Anruf beim einseitigen Bestellvorgang zurückgegeben. Es gibt dort auch keine Banner. Das Erhöhen der Header-Größe wäre eine temporäre Lösung, da nicht garantiert werden kann, dass das neue Header-Limit nicht überschritten wird.
Prateek