Einkaufswagen löscht alle Artikel / Einkaufswagen-Sitzung

27

Eine Site, die ich plötzlich verwalte (möglicherweise vor 2 Wochen - aus GA-Statistiken und erst jetzt gemeldet), hat begonnen, die Warenkorbelemente abzulegen, wenn Sie den Warenkorb anzeigen oder zur Kasse gehen.

Der obere "Mini-Warenkorb" zeigt die Artikel in der Dropdown-Liste an, bis Sie zum Warenkorb / zur Kasse navigieren und dann mit der Meldung "Es sind keine Artikel in Ihrem Warenkorb" in den Warenkorb gelangen.

Scheint ein Sitzungsproblem zu sein. Dies geschieht nicht, wenn Sie angemeldet sind.

Alle Optionen für die Sitzungsüberprüfung in "System-> Web-> Einstellungen für die Sitzungsüberprüfung" wurden entfernt und die Option "SID am Frontend verwenden" aktiviert. Dies hat das Problem gelöst, aber da sich diese Einstellungen in den letzten 3 Monaten nicht geändert haben, weiß ich, dass es ein zugrunde liegendes Problem gibt.

Dies deutet dann auf ein Problem mit der Wunde-ID hin? Irgendwie verliert die Site die Store-ID, in der sie sich befindet, und löscht die Sitzungs- / Warenkorbdaten? Vielleicht ein Beobachter / Ereignis / Umschreiben durch ein Modul.

Ich kann das Problem auf einem lokalen Entwickler oder einem UAT-Server nicht replizieren. DB auf UAT ist 2 Wochen von Live datiert, so dass dies auf ein DB-Problem / -Einstellung hinweisen könnte?

Dinge, die ich versuche: Ich bin damit beschäftigt, die aktuelle Live-Datenbank zu UAT zu ziehen, um sie auf den neuesten Stand zu bringen, um zu sehen, ob ich das Problem dort replizieren kann. wird aktualisiert, wenn das erledigt ist.

Sobald ich das Problem in einem nicht aktiven Bereich replizieren kann, deaktiviere ich Module systematisch und versuche herauszufinden, ob etwas mit den Store-IDs zu tun hat (beginnend mit MageMonkey und sweettooth, da diese vor 2 Wochen aktualisiert wurden).

Die Frage ist - was kann ich noch versuchen? Gibt es Hinweise darauf, wo ich einige Haltepunkte knacken und den Code schrittweise ändern kann, um festzustellen, ob ich dieses Problem nachverfolgen kann?

Es sind keine zusätzlichen Cache-Systeme wie Lack oder Memcache installiert. Server ist eine Standardinstallation von cpanel. Testen auf uat Ich habe den gesamten Cache deaktiviert.

weiteres Update: Es scheint, dass ich nicht reproduzieren kann, wenn ich zum Standarddesign zurückfalle. Ich verschiebe systematisch Themenüberschreibungsordner zurück.

Ich habe auch git verwendet, um den Code zurückzuverfolgen, und das Problem bleibt bei jedem Hash.

Update: Es ist schon eine Weile her, seit ich Zeit dafür hatte. Hohe Arbeitsbelastung.

Ich habe die Sitzungen auf dateibasiert verschoben und das Problem ist behoben. Da der Client in naher Zukunft nicht beabsichtigt, mehrere Server zu verwenden, und aufgrund meiner Arbeitsbelastung, wurde dies dabei belassen. Ich werde höchstwahrscheinlich später wiederkommen, um mich zu beißen.

Die Magento-Unterstützung schlug vor, dass das Problem mit dem Sweet-Tooth-Modul zusammenhängt, das die Sitzungsklassen erweitert, aber ich habe dieses Modul deaktiviert und das Problem blieb bestehen.

wird aktualisiert, wenn ich mehr Ergebnisse erhalte.

ProxiBlue
quelle
Die 'Use SID on Frontend' hat das Problem in der Tat nicht behoben. Scheint, dass das Problem zufällig ist. Funktioniert gut für einige Sitzungen, Tropfen für andere.
ProxiBlue
Ich kann dies jetzt zuverlässig auf UAT replizieren. Scheint, als hätten 8/10 Versuche, in den Warenkorb zu legen, dieses Problem. Dann bleibt die Sitzung bestehen und alles funktioniert wie gewohnt. SweetTooth und MageMonkey als Gründe beseitigt (nachdem sie aktualisiert wurden) Bestätigt, dass es sich um ein Sitzungsproblem handelt. Wenn ich zum Warenkorb hinzufüge, habe ich eine Sitzung mit einer ID. Wenn ich zum Warenkorb gehe, erhalte ich eine neue Sitzungs-ID.
ProxiBlue
Einige Kollegen stießen auf ein fast identisches Problem. Ich weiß nicht genau, was das Problem verursacht hat (ich weiß, dass es mit Memcache und / oder Lack zusammenhängt), aber die Lösung bestand darin, einen Lastenausgleich für die Server einzurichten. Wenden Sie sich hierzu an Ihren Serveradministrator.
Vlad Preda
1
Was ist die Magento-Version? Was verwenden Sie auch als Sitzungsspeicher? Macht der Wechsel zu Dateien bzw. zur Datenbank einen Unterschied?
Kristof bei Fooman
@Fooman Hallo, EE 1.11.2.0, mit DB-Sitzung, habe nicht versucht, in Dateien zu tauschen, wird zurückmelden, welches Ergebnis das gibt.
ProxiBlue

Antworten:

8

Auf unseren cPanel-Boxen wurden fehlende Assets auf der gesamten Magento-Seite angezeigt.

cPanel ist standardmäßig ErrorDocument 404 /404.shtmlaber /404.shtmlnicht existiert in dem Dokument root Magento, so dass die .htaccess wieder und Umleitungen ausgeführt wird , /404.shtmlum index.php(unter Verwendung von mod_rewrite).

Magentos Standard-.htaccess sollte 404, 500 und andere Fehlerbehandlungsroutinen explizit angeben.

Um dieses Problem zu beheben, haben wir unserem .htaccess Folgendes hinzugefügt:

ErrorDocument 404 /errors/404.php

Wir sollten wahrscheinlich auch 500s hinzufügen:

ErrorDocument 500 /errors/500.php

jmlnik
quelle
@ProxiBlue hat dies Ihr Problem gelöst, da es die akzeptierte Antwort ist? Ich habe fast das gleiche Problem. Immer noch nicht sicher, was es verursacht.
dchayka
9

Verwenden Sie Varnish auf dem Server?

Wir haben eine Reihe von Implementierungen gesehen, bei denen Leute das Cookie entfernen, BEVOR sie statischen Inhalt abrufen (images / css / js) - also wenn das image / js / css nicht existiert; Es lädt den Magento-Bootstrap und die 404-Dateien, wodurch die Cookie- und Site-Sitzung vollständig entfernt wird.

Ben Lessani - Sonassi
quelle
Kein Lack,
ich
Hallo, habe das gleiche Problem, kann ich wissen, was die Lösung ist?
Kandarp B Patel
@Ben Bitte können Sie dies näher erläutern.
burntblark
6

Ein Problem könnte sein, dass Magento die Sitzungsdaten beim Wechsel von HTTP zu HTTPS nicht speichert . Stellen Sie sicher, dass die erforderlichen Einstellungen für SSL usw. korrekt vorgenommen wurden.

Ein weiteres Problem könnte sein, dass der ISP des Kunden seine IP-Adresse ändert, wie hier dokumentiert .

So beheben Sie dieses Problem:

Ändern Sie die Einstellungen für die Sitzungsvalidierung in Magento Admin unter System> Konfigurationen> Web auf "Nein" mit Ausnahme von " HTTP_USER_AGENT validieren" . Wechseln Sie anschließend zu System> Cache-Verwaltung und aktualisieren Sie den Konfigurationscache, um die Änderungen zu übernehmen.

pzirkind
quelle
Der Warenkorb befindet sich noch in http, daher kein http-> https-Problem.
ProxiBlue
1
Es passiert uns, auch in unserer UAT-Umgebung, und wir haben eine feste IP. Schätzen Sie die Vorschläge.
ProxiBlue
5

Wir haben dieses Problem beobachtet, wenn auf einer Seite ein Bild fehlt, insbesondere, wenn das Bild auf allen Seiten fehlt, z. B. in einer Kopf- oder Fußzeile. Es scheint, dass die 404-Seite, die entweder Magento oder der Webserver zurückgibt, das Frontend-Sitzungscookie unterbricht und zu einem Sitzungsverlust führt. Es ist auf unserer Liste der zu behebenden Probleme, aber die Problemumgehung besteht darin, sicherzustellen, dass keine Bilder fehlen ...

Jonathan Day
quelle
Ich bin froh, dass dies bei einigen unserer Kunden nicht der Fall ist. Mehr 404s als ich zugeben möchte.
Philwinkle
2
@jonathanday Magento macht das nicht, aber Varnish wird schlecht konfiguriert.
Ben Lessani - Sonassi
@sonassi, kannst du die schlecht konfigurierten Varnish pls erweitern? Wir hatten das gleiche Problem. Das Beheben der 404-Seite hat das Problem behoben, würde aber gerne wissen, ob wir Varnish besser konfigurieren können!
JMLNIK
Dies geschah tatsächlich. Irgendwie habe ich diese Antwort verpasst! Tatsache ist, dass Magento nicht die Controller-Version der 404-Seite pushen sollte, sondern eine statische 404-Seite.
ProxiBlue
1
Ich habe eine Antwort gepostet, die es erklärt.
Ben Lessani - Sonassi
1

Dies kann ein Cookie- / Server-Datumsproblem sein. Als erstes sollten die Cookie-Header überprüft werden. Untersuche die Header (mit etwas wie Firebug, Charles oder Fiddler).

Sie sollten ungefähr Folgendes sehen:

Set-Cookie  frontend=9dhtlgf1qmo6loqksvvmqjd625; expires=Thu, 31-Jan-2013 05:01:13 GMT; path=/; domain=.foo.com; HttpOnly

Wenn der Wert für das Feld "Expires" in der Vergangenheit liegt, ist die Uhrzeit auf Ihrem Server wahrscheinlich falsch. Dies kann passieren, wenn Dienste wie ntpd nicht gestartet werden können. Wenn dies der Fall ist, überprüfen Sie die Uhrzeit auf dem Server. Wenn die Zeit abgelaufen ist, überprüfen Sie den Status von ntpd (oder des Daemon-Dienstes, um die Serverzeit auf dem neuesten Stand zu halten).

beeplogic
quelle
Karo, Server - Datum / Zeit , wenn in Ordnung, Cookie Datum / Uhrzeit ist gut :(
ProxiBlue
1

Die PHP-Garbage-Collection löscht die Sitzungen vorzeitig. Ich habe das selbst gesehen frequentierten Websites gesehen .

Einige Tipps zur Fehlerbehebung:

  • Wie alt ist deine älteste Sitzung? Herausfinden:ls -laht [mageroot]/var/session/ | tail - Wenn Sie keine Sitzungen haben, die länger als ein paar Wochen dauern, wird wahrscheinlich die Speicherbereinigung die Schuld tragen
  • Verschieben Sie Sitzungen vorübergehend in einen anderen Datenspeicher, z. B. MySQL oder Memcached. Ist das Problem behoben?
  • Geschieht dies auf einem Entwicklungsserver? Wenn dies nicht der Fall ist und alle Faktoren gleich sind, kann es sein, dass das Verkehrsaufkommen einen vorzeitigen Sitzungsablauf oder eine Speicherbereinigung auslöst

Ich habe dies auf zwei Arten behoben:

  1. Fügen Sie in Ihrem .htaccess hinzu php_value session.gc_maxlifetime 2592000
  2. Stellen Sie in Ihrer php.ini session.gc_maxlifetime ein

Weitere Informationen finden Sie unter: http://www.php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

Philwinkle
quelle
1
Gute Vorschläge. Werde es in ein paar Tagen versuchen
ProxiBlue
1

Wir hatten ein ähnliches Problem. In unserem Fall war es die Lackkonfiguration (wie Ben Lessani vorschlug). Wir haben unseren Varnish so konfiguriert, dass 404s für 120s zwischengespeichert werden, damit unsere Server nicht beschädigt werden, wenn ein 404-Fehler auf einer Seite auftritt.

Das Problem ist also, dass Magento in den 404-Jahren mit einem Set-Cookie im Header für Frontend- und Frontend_cid-Cookies geantwortet hat, das die Kundensitzung zurücksetzt.

Unsere Lösung für dieses Problem besteht darin, alle Set-Cookies für 404 Antworten zu entfernen.

unset beresp.http.set-cookie;
Thanu
quelle
0

Dumme Dinge, die in der Vergangenheit PHP-Sitzungen für mich unterbrochen haben und eine Überprüfung wert sein könnten:

  • eine volle Festplatte
  • ungenaue Serverzeit
Xyphus
quelle
:) als erstes die Festplatte überprüft, alles in Ordnung.
ProxiBlue
Datum gut :( nicht so einfach, ugh [~ / public_html / var / log] # Datum Do Jan 31 11:55:49 WST 2013
ProxiBlue