Löschen von Magento-Sitzungsdateien

8

Der Ordner var / session enthält ständig eine sehr große Datenmenge, die eine große Innode-Nutzung auf dem Server verursacht.

Jedes Mal, wenn ich Dateien aus dem Sitzungsordner lösche, sinkt die Innode-Nutzung auf ein Minimum.

Ich möchte also fragen, wie ich diese Sitzungsdateien beispielsweise alle 24 Stunden automatisch löschen kann.

Ich habe gerade angefangen, mit MAgento zu arbeiten, also bin ich ein bisschen Neuling, bis jetzt wäre eine große Erklärung willkommen.

Ich weiß, ich sollte irgendwie einen Cron-Job durch cpanel oder smt so erstellen.

Andrius
quelle

Antworten:

2

Wenn Sie einen Cron-Job verwenden, um alle Sitzungen zu löschen, löschen Sie alle Kunden-Einkaufswagen und die Leute verlassen Ihre Website wütend.

Ich schlage vor, Sie sehen sich Ihre Sitzungsdateien an und prüfen, ob sie verdächtig aussehen.

Überprüfen Sie hier, wo sich die IP-Adressen Ihrer Besucher befinden: https://www.iplocation.net/

Wenn Sie beispielsweise eine Reihe chinesischer IP-Adressen finden und Ihre Website nicht chinesisch ist, handelt es sich wahrscheinlich um Bots, die Ihre Bandbreite verschwenden. Sie sollten ihre IP-Bereiche in Ihren Apache-Einstellungen oder in blockieren .htaccess.

(Ich glaube, Sie können in Apache sogar länderbasierte Filterung durchführen, aber ich denke, dass dies die Antwortzeiten verlangsamt. Das habe ich nicht versucht.)

Magento 1.x (nicht sicher über 2.x) scheint auch einen Fehler zu haben, bei dem für jede Anfrage eine neue Sitzung erstellt wird, wenn der Client keine Cookies akzeptiert. Bots wie Googlebot, Bingbot, SemrushBot und andere generieren also eine große Anzahl von Sitzungsdateien.

Für meinen Server musste ich nur diese Bot-Sitzungsdateien entfernen. Bis ich die Zeit habe, den Magento-Fehler zu finden und zu beheben, wird ein Shell-Skript von cron ausgeführt, um alle Sitzungsdateien zu entfernen, die diese Zeichenfolgen enthalten:

  • Googlebot
  • Bingbot
  • Spinne
  • Semrush
  • AhrefsBot
  • UptimeRobot
  • spbot
Buttle Butkus
quelle
Haben Sie eine Lösung gefunden, um den Fehler zu beheben? Ich habe gerade über 1,2 Millionen Dateien gelöscht, was einfach lächerlich ist.
Marco
Das Bash-Skript, das ich geschrieben habe, um die Dateien zu bereinigen, hat anfangs großartig funktioniert, aber die Muster ändern sich ständig, so dass es eine Menge Wartungsarbeiten ist. Also plane ich, mich in den Code zu vertiefen und die richtige Lösung zu finden. Der Code sollte prüfen, ob der Client Cookies akzeptiert (weil Bots diese nicht akzeptieren) und KEINE Sitzung für diese Clients erstellen.
Buttle Butkus
Würde es Ihnen etwas ausmachen, den Code zu teilen, wenn Sie fertig sind? Im Moment haben wir nur ein Problem mit M2E Pro, Google und Bing. Diese drei Dinge erzeugen Haufen von Sitzungsdateien.
Marco
1

Anstatt benutzerdefinierte Skripte zu verwenden, ist es sinnvoller, PHP diese einfach für Sie zu löschen, indem Sie die richtigen Werte in Ihrer php.iniDatei angeben. Wenn Sie sicherstellen, dass dies session.gc_maxlifetimeeinen relativ kleinen Wert hat (aber> = Ihr Sitzungscookie-Timeout), z. B. 1440, und session.gc_probabilityauf 1 gesetzt ist, sollte der integrierte PHP-Sitzungs-Garbage Collector die Dateien für Sie entfernen.

Peter O'Callaghan
quelle
Wie ändere ich sie, wenn ich die Datei php.ini nicht im Magento-FTP-Verzeichnis finden kann? Ich habe versucht, die Datei test.php zu erstellen und diesen Wert mit ini_set festzulegen, aber Zeichenfolgen ändern ihre Werte nicht. Bitte helfen Sie
Andrius
Es funktioniert nicht, hatten Sie andere Lösungen? Bitte helfen Sie
Jenith Samuel
Erstellen Sie einfach eine Datei mit dem Namen phpinfo.php im Magento-FTP-Verzeichnis und geben Sie "phpinfo ();" ein. Versuchen Sie dann, diesen in den Browser zu laden, um herauszufinden, wo genau sich die php.ini auf Ihrem Server befindet. Dann können Sie diese Änderungen wahrscheinlich einfach vornehmen.
Asheem Patro
In meinem Fall können Bots Tausende neuer Sitzungen pro Stunde erstellen. Wir möchten jedoch, dass echte Kundensitzungen Wochen oder länger dauern. Eine Sitzungsbereinigung durch PHP ist also nicht die Antwort. Magento muss vor dem Erstellen einer Sitzung überprüfen, ob der Client Cookies akzeptiert (und / oder ob der Client ein Bot ist), anstatt für jede Seitenladung, die kein Cookie gesendet hat, eine neue Sitzung zu erstellen.
Buttle Butkus
1

Magento speichert Sitzungsdaten des Kunden im Ordner var / session. Wenn Sie diesen Ordner löschen, werden alle Sitzungsdaten des Kunden gelöscht

Nehmen wir an, einer Ihrer Gastkunden fügt 3 Produkte zum Warenkorb hinzu. Wenn Sie Sitzungsdaten löschen, werden alle 3 Produkte aus dem Warenkorb entfernt. Dies ist eine schlechte Erfahrung für den Kunden, anstatt Sitzungsdaten zu löschen, die Sie in der Datenbank speichern können

Um die Datenbank für die Sitzungsspeicherung zu verwenden, haben Sie dies einfach in Ihrer App / etc / local.xml :

<session_save><![CDATA[db]]></session_save>

oder Sie können den Cache redis session / Memcached Session verwenden , um Daten im redis cache / Memcached Session zu speichern

Um einen zwischengespeicherten Sitzungsspeicher in Magento verwenden zu können, muss dies in Ihrer App / etc / local.xml enthalten sein :

<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://localhost:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>

Weitere Informationen zum Sitzungsspeicher finden Sie unter diesem Link

Vaibhav Ahalpara
quelle
0

Eine Lösung besteht darin, einen Cron-Job zu erstellen, der einmal pro Tag ausgeführt wird, um die gewünschten Dateien zu löschen.

Hier können Sie sehen, wie Sie einen Cron-Job einrichten: /ubuntu/2368/how-do-i-set-up-a-cron-job

Ein Cpanel-Tutorial für Cronjob: http://support.hostgator.com/articles/cpanel/how-do-i-create-and-delete-a-cron-job

Sie können ein Bash- oder PHP-Skript erstellen, mit dem Dateien gelöscht werden. Und setzen Sie dieses Skript in den Cron, um 3 oder 4 Uhr morgens Serverzeit ausgeführt zu werden, wenn der Server weniger genutzt wird. Um zu testen, ob das Skript funktioniert, können Sie es manuell ausführen.

Nikola
quelle
0

Erstellen Sie eine sh-Datei im Dokumentstamm. Geben Sie den folgenden Code ein.

 #!/bin/bash
 # Shell script for cleaning session
 path=your document_root path goes here
 cd $path
 rm -rf var/session/*

Ändern Sie den Pfad mit Ihrem document_root-Pfad ohne Anführungszeichen. Führen Sie diesen Code aus, wenn weniger Site-Treffer vorliegen.

ERLEDIGT!!

Shyam Krishna Sreekumar
quelle
das funktioniert bei mir rm -rf var / session / *
Alam Zaib
Dies beendet auch alle aktiven Sitzungen
Kevin Krieger