Hey ho, ich habe gerade folgendes Problem:
In einem Shopsystem wird die Session in der Datenbank gespeichert. Wenn ein Kunde seine Daten angibt, werden diese vie Post gesendet, in der Session gespeichert und die wiederum landet in der Datenbank und wird von dort auch wieder ausgelesen.
An sich funktioniert das alles bis zu dem Zeitpunkt wo jemand auf den Gedanken kommt, Anführungszeichen, oder Slashes zu verwenden. Verbieten dieser Zeichen ist keine Option, weil es ja auch Namen mit ’ gibt.
Ich komme irgendwie nicht auf eine Lösung, daher beschreibe ich mal, was alles gemacht wird und wie das Problem genau aussieht. Vielleicht hat ja jemand von euch einen Tipp für mich.
Jedes Post in dem System wird als erstes mit einem mysqli_real_escape_string durch eine Schleife gejagt.
Dann kann ich selber noch irgendwelche Änderungen an den Daten machen und sie an die Session übergeben.
Das funktioniert augenscheinlich auch, bis zu dem Zeitpunkt, wo die Seite neu geladen wird. Dann ist die Session kaputt.
Wir (ein paar Kollegen und ich) hatten schon den session.serialize_handler im verdacht, und haben anstelle des Standard php handlers wddx ausprobiert, das hat das Ergebnis zwar verändert, aber irgendwo muss noch ein Fehler sein und der session.serialize_handler kann nicht die eigentliche Ursache sein.
Die Session geht auch da kaputt… Haben auch schon probiert die Zeichen zu maskieren, auch das führt zu keiner Besserung. Sobald sie enthalten sind, geht die Session kaputt. Dadurch kann sie nicht richtig ausgelesen werden und die Folge ist letztendlich „nur“, dass einige Teile der Session verloren gehen (das was man als vorher eingegeben hat) und solange die Daten nicht vernünftig vorhanden sind, kann nicht bestellt werden, aber irgendwie muss sich das doch beheben lassen.
Als wir uns die Sessiondaten in der DB angeschaut haben, ist uns aufgefallen, dass wenn es zu dem Fehler kommt viel mehr schließende Klammern } als öffnende { gibt. Wenn man dann die gleichen Daten nochmal Abschlickt, bläst das die (kaputte) Session nach und nach bis zu einem gewissen Punkt auf.
Da ich keinen Quellcode Posten kann, frage ich hier einfach nur nach Tipps, und Spekulationen, die zu dem Problem führen könnten. Vielleicht hilft es ja.
Aber hier mal ein Beispiel auf welche Art die Session kaputt geht:
In dem Beispiel ist im Nachnamen ein ’ enthalten.