ich habe bei uns immer wieder das Problem, dass der Warenkorb als leer angezeigt wird, obwohl Artikel im Warenkorb enthalten sind.
Wenn ich Artikel in den Warenkorb lege und ein wenig auf den anderen Seiten hin und her browse, wird mir der Warenkorb Button im Header oben immer wieder als leer angezeigt, obwohl bereits Artikel im Warenkorb liegen.
Öffne ich nun den Warenkorb über den Button im Header, werden mir die Artikel auch korrekt angezeigt. Diese verschwinden also nicht aus dem Warenkorb, er wird im Header aber trotzdem als leer dargestellt.
( Artikel wurde im Bild rausgeschnitten - die Anzeige ist korrekt )
Betrifft auch die Anzahl der Artikel beim Merkzettel Button im Header.
Der Fehler tritt aber extrem sporadisch auf und wirft keinerlei Fehlermeldungen oder ähnliches, was das Debugging extrem schwer macht
Jemand eine Idee woran das liegen kann?
Wir verwenden Shopware 5.6.9, PHP 7.4.13 und Custom Theme usw.
Mit dem Responsive Theme konnte ich das ganze bisher nicht nachstellen, was aber nichts heißen muss, weil ich das Verhalten auch mit unseren Themes nur unregelmäßig und sporadisch überhaupt reproduzieren kann.
Was ich bisher herausfinden konnte:
Der Fehler tritt immer dann auf, wenn das „nocache“ Cookie vor dem Aufruf der nächsten Seite gefehlt hat und dieser somit bei den Request Cookies fehlt. So lässt sich der Fehler auch manuell hervorrufen (zumindest für den nächsten Aufruf).
Die Frage ist nur, wieso fehlt dieses Cookie sporadisch?
Mittlerweile konnte ich dieses Problem auch mit dem responsive Theme in unserer Entwicklungsumgebung nachstellen.
Kann das irgendwie am Caching oder irgendwelchen Caching Einstellungen liegen? Irgendwelche Server Configs die falsch hinterlegt sind?
Über Tipps woran das liegen könnte, wäre ich sehr dankbar
// EDIT: Der Fehler lässt sich auch im Sicherheitsmodus und komplett ohne Plugins nachstellen
Mittlerweile kann ich mir nur noch irgendwelche Caching Einstellungen oder ähnliches vorstellen.
Wenn Du nichts am Core gedreht hast, kann es in der Tat an deinen Cache-Einstellungen liegen. Backend > Einstellungen > Caches/Performance > Caches/Performance. Reiter Einstellungen, unter Allgemein > HTTP-Cache mal die Cache-Ausnahmen prüfen, da sollte ein Eintrag für checkout sein:
Am Core haben wir nur ein paar kleinere Bugfixes (aus dem Github Repo übernommen) eingebaut - als Zwischenlösung bis zum nächsten Update unseres Produktivsystems.
Das waren aber eher die MwSt.-Themen ab 01.07.
Die Cache Einstellungen sollten so weit eig. passen, da wurde meines Wissens nach auch nichts verändert, lediglich „Nicht gecachte Controller Tags“ hinzugefügt für eigene Plugin Widgets.
In einem lokal frisch aufgesetzten SW 5.6.9 System konnte ich das Problem nicht nachstellen. Deshalb gehe ich hier mittlerweile entweder von irgendwelchen SW Einstellungen (in Bezug auf Cache oder ähnliches) oder aber irgendwelchen falsch konfigurierten Settings auf dem Root Server aus.
Im nächsten Schritt würde ich es mal damit versuchen ein SW Update (innerhalb einer Entwicklungsumgebung) einzuspielen und dann nochmal zu testen. Oder das Produktivsystem vom Server mal in ein lokales System zu kopieren und dort nochmal nachzustellen um den Bereich weiter eingrenzen zu können.
Aber so langsam gehen mir die Ideen aus
Wo das ganze im Template liegt habe ich bereits gefunden und mir angesehen und auch entsprechend versucht zu debuggen.
Der Vorgang läuft ja so, Warenkorb Artikel werden in der DB hinterlegt (s_orders_basket) und via Session ID mit den User verknüpft. Wenn der Warenkorb (was ja nur sporadisch passiert) als leer angezeigt wird, fehlen die Variablen $sBasketAmount und $sBasketQuantity in der View. Die Session wird in den Fällen aber nicht zurückgesetzt und ganz normal geladen usw. In der DB ist währenddessen auch alles ganz normal vorhanden, es scheint also irgendwo zwischen Datenbank und „View“ verloren zu gehen.
Was mir hier noch aufgefallen ist beim reproduzieren des Fehlers:
Sobald ich den Ajax-Warenkorb öffne / ihn mir ansehe - dort sind ja Artikel enthalten, auch wenn im Header oben 0 steht, dann funktioniert die Anzeige im Header beim nächsten Aufruf einer Seite zu 100%, anschließend wieder sporadisch.
Nach Cache Leerung tritt das Problem erstmal nicht mehr auf, im Produktivsystem nur für kurze Zeit, im Dev-System teilweise bis zum nächsten Tag nicht mehr
Aha. Das ist allerdings sehr merkwürdig, denn die werden normalerweise immer gesetzt, das passiert in der Bootstrap.php
Da hast Du ja schon mal einen Ermittlungsansatz
Auf irgendeine Weise muss dieses Problem mit dem HTTP-Proxy-Cache zusammenhängen, denn wenn ich diesen leere / lösche, tritt der Fehler für eine gewisse Zeit nicht mehr auf.
Wie gesagt, im Dev-System für längere Zeit (teilweise erst am nächsten Tag wieder), aber im Produktivsystem kommt es innerhalb kürzester Zeit wieder.
Ok, also was ich nun als „Unterschied“ ausmachen konnte ist folgendes:
das Problem tritt nur auf, wenn das nocache Cookie bei den Request Cookies fehlt!
das nocache Request Cookie fehlt aus irgendeinem Grund sporadisch
Außerdem ist dadurch auch die Anzeige für die Anzahl der Artikel im Merkzettel mit betroffen.
Es wird also immer wenn das Problem auftritt, sowohl kein Warenkorb Inhalt als auch ein Merkzettel ohne Artikel darin angezeigt.
In der nächsten Abfrage funktioniert es dann aber zum Teil wieder…
Aktuell komme ich noch nicht auf den Grund dafür.
Du nutzt Symfony als Cache, richtig?
Was steht denn in deiner config.php drin? Vgl. Shopware HTTP cache
In dieser Doku steht auch drin, wie man den Cache debuggen kann.
So langsam gehen mir jetzt auch die Ideen aus… aber sieht irgendwie nach einem Problem mit den ESI requests aus, schalte bitte mal den debug für den Cache ein und prüfe die X-… Werte im Response Header
Ja, müsste der Symfony Cache sein. Mir wäre nicht bekannt, dass es vom Standard abweicht.
Die Config für den httpcache ist bei uns komplett auf Standard.
Den Debug habe ich in unserer Entwicklungsumgebung bereits aktiviert. Worauf genau soll ich bei den X-Werten im Response Header achten?
Ich habe jetzt mal die Response Header bei den beiden Aufrufen vergleichen.
Einmal mit leer angezeigtem Warenkorb und einmal mit korrekt angezeigtem Warenkorb.
Bei den X-Werten gibt es wohl keinerlei Unterschiede.
Es gibt aber folgende Unterschiede im Response Header:
cache-control Parameter:
Bei einem korrekten Aufruf sind hier die Werte „no-store, no-cache, must-revalidate, no-cache, private“ enthalten. Bei einem leeren Warenkorb lediglich „no-cache, private“.
set-cookie:
Beim leeren Warenkorb fehlt der Eintrag für set-cookie mit dem Wert für die session-<shopId>
Im Request Header ist aber der Cookie mit der Session enthalten (in beiden Fällen). Beim leeren Warenkorb fehlt dort aber der Cookie für no-cache=checkout-<shopId>
Keine Ahnung wieso, aber scheinbar bekomme ich im Response immer wieder folgendes:
Dies scheint dann im Browser den Cookie zu löschen, was dazu führt, dass er beim nächsten Request nicht mehr enthalten ist und somit der Warenkorb wieder leer angezeigt wird.
Wir haben ein ähnliches Problem, was aber eher die Preisanziege betrifft, sowie den Warenkorb wert selbst.dachten erst es kam durch ein Plugin, Doch der Entwickler des Plugins hat sich unseren Shop angesehen, und meinte das von Shopware die Session Cookies gelöscht werden, obwohl wir die Sessions in der Config auf 24std gestellt haben.
Problem tritt trotzdem immer wieder auf.
Wer gut wenn ein Entwickler seitens Shopware mal die Sessions kontrollieren könnte
Im Backend, unter Einstellungen > Systeminfo, haben alle Einträge der ersten drei Tabs ein grünes Häkchen?
→ Ja, alles grün bis auf 2 Dateien bei denen ich manuelle Bugfixes aus neueren Shopware Versionen eingebaut habe (Fehler trat aber auch vorher schon auf). Im frisch aufgesetzten System mit dem ich den Fehler ebenfalls reproduzieren konnte, war nichts angepasst - alles in Original-Zustand und somit auch alle Häkchen grün.
Welche Cookies sind im SW Cookiemanager (Frontend - Cookieeinstellungen) aktiviert?
→ ich habe hauptsächlich mit den „technisch erforderlichen“ Cookies getestet. Es lässt sich aber auch reproduzieren, wenn man alle Cookie Arten akzeptiert
Tritt das Problem auch mit anderen Browsern auf? Browser evtl im Private Mode?
→ Fehler tritt in unterschiedlichen Browsern (getestet mit Brave / Chrome, Firefox und Edge), sowohl im normalen als auch im privaten Modus, so wie bei mehreren Usern an mehreren Geräten (auch auf mobilen Geräten).
→ Interessanterweise tritt der Fehler nicht bei allen Usern / Browsern zeitgleich auf, sondern teilweise mit Verzögerung. Oder ist bei einem User reproduzierbar, beim anderen aber nicht (meist nachdem der SW Cache gelöscht worden ist).
Nochwas, habt ihr die Option Login Cookie an?
→ Den haben wir nicht aktiviert - konnte den Fehler aber sowohl mit dem Login Cookie als auch ohne nachstellen.
Ich hab mir jetzt mal noch eine SW 5.7.2 Instanz aufgesetzt und versuche es damit nochmal nachzustellen.
Also mit einer Kopie unserer Produktivumgebung + Update auf Version 5.7.2 kann ich das Problem in dem entsprechenden Staging System nicht mehr reproduzieren.
Nachdem mit 5.7.0 die Zend_Session durch die Symfony_Session ersetzt wurde, könnte das evtl. damit zusammenhängen.
Wir werden also wohl noch ein wenig bis zum nächsten Update am Produktivsystem warten müssen um das Problem wieder los zu werden.
Ok, muss meine Aussage leider revidieren. Meine Kollegen konnten das Problem nun auch in unserem neuen Dev-System auf v5.7.2 reproduzieren. Es muss also doch an irgendetwas anderem liegen