| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Bewertung: |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Hallo, ich vermute, dass dir hier die Implementierung des Destruktor-Verhaltens einen Streich spielt. Soweit ich das im Kopf habe, entscheidet PHP selbst über die Reihenfolge der Destruktion von Objekten oder richtet sich nach der Reihenfolge der Erstellung deiner Objekte. In beiden Fällen hast du das Problem, dass du nicht deterministisch sagen kannst, wann deine Session-Klasse die Sessions persistiert. Sollte also deine Datenbank-Abstraktionsschicht vor deiner Session-Klasse destruktiert werden, ist die MySQL-Verbindung logischerweise weg. Die großen Zeitunterschiede zwischen Konstruktor und Destruktor kann ich mir auch nicht erklären.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 05.09.2007
Beiträge: 5.044
![]() | Wenn Du set_save_handler benutzt, wird die angegebene Funktionen callback $close und callback $write von PHP aufgerufen, wenn es an der Zeit ist, die Session-Daten zu sichern. Das mit dem Destruktor zu verknüpfen, "fühlt" sich nicht richtig an. Damit habe ich mich noch nicht beschäftgt, aber wie gessagt, es ein "Gefühl", dass das nicht passt. Ich weiss ja nicht, wie der Code genau aussieht, aber einfache Überlegung: session_set_save_handler(array($this, 'onOpen'), array($this, 'onClose'), ... Damit besteht eine Referenz auf das Objekt in der Session-Verwaltung. Das Objekt kann nur dann "gracefully" abgebaut werden, wenn es keine Referenz mehr gibt. Du beendet die Session aber erst explizit im Destruktor des Objekts. Wann wird also was abgebaut? Meine Vermutung ist: PHP löst diesen "Konflikt" nicht (oder anscheined nicht immer) so auf, wie Du es erwartest. |
| | |
| | ||
| Moderator und Wett-König | Zitat:
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 05.09.2007
Beiträge: 5.044
![]() | Zitat:
Ich kann mir mehrere Szenarien vorstellen in Bezug auf die Referenz- und Resourcenverwaltung und dem Beenden der PHP-Instanz, bei der es hier knallen kann. | |
| | |
| | |||
| Neuer Benutzer Registriert seit: 15.08.2008
Beiträge: 9
![]() | Servus. Zitat:
Daher ging ich davon aus, dass ich spätestens beim zerstören des Sessionobjektes die Session schreiben muss. Dem ist dann nicht so, daher habe ich den Aufruf entfernt. Zitat:
Mir ist zusätzlich noch aufgefallen, dass ich es sogar direkt nach dem erstellen wieder zerstören kann(ohne session_write_close im destructor), und die Sessions werden trotzdem sauber am Ende des Skriptes gespeichert. Habe nun über nacht nochmal Logs erstellen lassen, um genauer sehen zu können, was passiert. Dabei lief die session schon ohne den expliziten Aufruf von session_write_close im destructor. Fazit: Problem bleibt das gleiche, in seltenen Fällen habe ich gemessene Zeiten zwischen dem öffnen und schreiben einer Session, die größer als max_execution_time sind. Die Skripte werden auch nicht mit einem Fatal-Error beendet. Und nur in den Fällen mit diesen riesigen Zeiten, tritt eben der Fehler auf. Zählt die Scriptabschaltung nicht mehr zur max_execution_time dazu? Dann wäre schonmal die Sache an sich nicht mehr so unklar, ich müsste nur noch herausfinden, wieso er manchmal so ewig braucht, bis das schreiben der Session ausgeführt wird. Grüße, Chestarbargel | ||
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Merkwürdiges Verhalten von Objekten in einem Array | PHP-Fortgeschrittene | 6 | 20.10.2005 00:18 | |
| Merkwürdiges Verhalten der phpsessions um Mitternacht herum | PHP-Fortgeschrittene | 17 | 15.02.2005 14:20 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| datenbank basierte sessionverwaltung, php.de session zeitmessung, session verhalten php 5.2, sessionverwaltung datenbank, php destructor 60 seconds, session db klasse destruktor |