Warenkorb Button immer wieder 0 € obwohl Artikel im Warenkorb

Hi zusammen,

ich habe bei uns immer wieder das Problem, dass der Warenkorb als leer angezeigt wird, obwohl Artikel im Warenkorb enthalten sind.

image

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.

image
( 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 :confused:

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 :slight_smile:

// EDIT: Der Fehler lässt sich auch im Sicherheitsmodus und komplett ohne Plugins nachstellen :confused:
Mittlerweile kann ich mir nur noch irgendwelche Caching Einstellungen oder ähnliches vorstellen.

Hi iLuHa,

die Anzeige des Warenkorbwerts ist im Standard in /themes/Frontend/Bare/widgets/checkout/info.tpl definiert, darin siehst Du dass der Wert aus der Variablen $sBasketAmount stammt.

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:

LG Phil

Hi @phil,

danke für den Hinweis.

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 :frowning:

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

Gruß iLuHa

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 :slight_smile:

LG Phil

Sorry, da habe ich mich vielleicht falsch ausgedrückt :wink:
Die Variablen an sich sind in dem Fall schon vorhanden, aber eben „0“.

Im Screenshot oben → wenn der sporadische Fehler auftritt.
Im Screenshot unten → wenn der Fehler nicht auftritt - ein Aufruf später …

Und SessionID ist in beiden Fällen gesetzt?

Korrekt, die SessionID ist in beiden Fällen vorhanden.

Ich hab in der engine/Shopware/Controllers/Widgets/Checkout.php mal ein paar Variablen gesetzt fürs Debugging …

$view->assign('debugSessionBasketQuantity', $this->session->sBasketQuantity);
$view->assign('debugSessionBasketAmount', $this->session->sBasketAmount);
$view->assign('debugSessionId', $this->session->get('sessionId'));

Was dann in der Ausgabe so aussieht, wenn der Fehler mal auftritt:

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

LG Phil

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:
image

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.

Hmm. Prüf mal noch folgendes:

  • Im Backend, unter Einstellungen > Systeminfo, haben alle Einträge der ersten drei Tabs ein grünes Häkchen?
  • Welche Cookies sind im SW Cookiemanager (Frontend - Cookieeinstellungen) aktiviert?
  • Tritt das Problem auch mit anderen Browsern auf? Browser evtl im Private Mode?

LG Phil

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

Nochwas, habt ihr die Option Login Cookie an?
Vgl. [Gelöst] : Shopware Fronend Session / Cookie geht beim Schließen des Tabs kurzzeitig verloren

LG Phil

  • 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 :confused:

Gibt hier wohl auch ein entsprechendes Ticket zu dem Thema: Shopware Issuetracker

Leider aber schon seit ~2,5 Jahren offen.
Wäre nett, wenn der eine oder andere das Ticket hoch-voten würde :wink: