Server legt laufend neue Sessions an

Tommy57

Erfahrenes Mitglied
Hallo,

ich stehe momentan vor einem merkwürdigen Problem.

Vor 2-3 Tagen hat sich unsere Webapplikation aufgehangen, da kein Speicherplatz mehr vorhanden war. In dem Ordner, wo die Sessiondaten abgelegt werden, befanden sich über 400.000 Dateien. Nachdem ich alle gelöscht hatte, lief die Seite wieder wie gewohnt.

Das Problem ist nun, dass unsere Webapplikation, die schon seit über einem Jahr online ist, scheinbar seit wenigen Tagen pro Sekunde etwa 4 Sessiondateien anlegt. Nach etwa 8 Stunden befinden sich wieder über 100.000 Dateien in dem Ordner. Somit muss ich aktuell alle 1-2 Tage den Ordner leeren.

Hat jemand eine Idee, woran das liegen könnte, oder was da passiert sein kann. An der Applikation wurde seit mehr als einem Monat nichts mehr geändert. Auf der Seite befinden sich unter 100 User parallel, davon sind die meisten Bots. Wir arbeiten mit dem Zend Framework.

Gruß, Tommy
 
Das es Bots sind, die da zugreifen, ist sehr wahrscheinlich der hilfreichste Hinweis für das "Problem". Kann es sein, das diese Bots keine Cookies akzeptieren? Wenn dem so ist, liegt hier die Ursache: für jeden Zugriff, bei dem keine (Session-)Cookies vom (Bot-)Client akzeptiert werden, muss eine neue Session erzeugt werden.

Sorg dafür, das die Bots Cookies akzeptieren oder stell dein System von Session-Cookies auf Session-IDs in den URLs um.
 
Hallo saftmeister,

danke für den Hinweis. Dass die Bots der Grund dafür sind, hört sich sehr plausibel an. Zu mal die Appikation über 100.000 Seiten hat, wodurch die Bots (Crawler) endlos auf dem Server sitzen und dadurch auch entsprechend viele Requests machen.

Die Idee mit den Session-IDs hört sich interessant an. Das werde ich mal testen. Ich arbeite mit dem Zend Framework. Sollten derartige Probleme nicht vom Framework gelöst werden?

Ich werde morgen mal einen Bot schreiben und die Entwicklungsseite absurfen lassen. Mal schauen, ob er dann auch bei jedem Request eine Session Datei anlegt.
 
Also, ich habe jetzt mal einen kleinen Bot geschrieben, der x mal die Startseite der Entwicklungsplattform aufruft. Siehe da, es werden auch tatsächlich x Sessions angelegt.

Das ist schon mal sehr gut, dass ich das Problem reproduzieren kann, aber ich denke Session-IDs ist nicht die Lösung. Falls der oder die Übeltäter Crawler einer Suchmaschine sind, würden die Session-IDs nachher bei deren Suchergebnissen erscheinen, oder irre ich mich da?!

Dieses Problem müsste doch ein sehr bekanntes Problem sein, oder nicht? Wie würde man denn dieses Problem korrekt lösen? Der Garbage Collector ist auf 86.400 Sekunden eingestellt, komischerweise werden sie aber vom Garbage Collector nicht entfernt.
 
Hi saftmeister,

die Bots sind nicht von mir. ^^ Das sind irgendwelche Crawler von Suchmaschinenen und so. Hab gestern gesehen, dass unter Anderem der Google Image Bot involviert ist (einige Bilder werden durch PHP generiert).

Ich sehe gerade, dass der Garbage Collector die ganzen Sessions auf der Entwicklungsplattform gelöscht hat. Da stellt sich mir die Frage, wieso tut er das auf der Produktionsplattform nicht?!
 
Zuletzt bearbeitet:
Dann starte doch im Falle, du hast einen Bot erkannt, einfach keine Session. Warum sollte ein Crawler-Bot auch eine Session benötigen?
 
Wenn du Session nur bei bestimmten Controllern erzeugst, wäre es auch denkbar, mit einer robots.txt zu arbeiten, in der diese Controller ausgeschlossen werden.
 
Zurück