2016-08-03 1 views
0

Ich arbeite an einem Projekt auf Basis von CakePHP 3, die in Bezug auf PHP und MySQL für Prozessor und Speichernutzung mäßig schwer ist, aber die exakt gleichen Seiten 99% der Zeiten an die Benutzer dient.Sitzung wurde bereits gestartet

Also habe ich mich entschieden, ein Caching-System wie this one zu verwenden, das ich vor ein paar Jahren entwickelt habe. Es speichert nur eine zwischengespeicherte HTML-Datei der gesamten Seite, wodurch vermieden wird, alle Ausführungen bei jeder Anfrage auszuführen. Es ist ein dummes System, aber es macht seine Arbeit ziemlich gut.

Das Problem ist, muss ich auf die Sitzungsvariablen für ein paar Prüfungen zugreifen. Um dies zu tun auslösen ich session_start() in meinem Caching-System, und manchmal cakephp führt diesen Fehler, wenn die Seite nicht bereits zwischengespeichert:

Session was already started 

Wie kann ich diesen Fehler zu vermeiden? Gibt es eine Möglichkeit, die Sitzung in meinem Caching-System zu beenden, damit CakePHP eventuell eine neue starten kann? Ich habe versucht mit session_abort und session_register_shutdown(), aber das hat nicht funktioniert, und ich bin mir nicht einmal sicher, das ist der richtige Weg, was ich brauche ...

EDIT: Der Bearbeitungsfluss ist: Anfrage -> Caching-System -> Kuchenphp. Deshalb kommt meine session_start() vor die CakePhp und ich würde es vorziehen, cakePHP Core Files nicht zu berühren, deshalb waren die anderen Fragen für mich nicht brauchbar. Ich möchte dieses Problem lieber in meinem Caching-System lösen.

+1

Dies ist kein Duplikat, zumindest nicht ein Duplikat http://stackoverflow.com/questions/10093264/load-session-start-only-if-session-does-not-exist, wie Das "Problem" befindet sich im CakePHP-Kern, der nicht einfach wie ein Userland-Code geändert werden kann und dies sollte anders behoben werden. – ndm

+0

Unabhängig davon, ob eine Sitzung geschlossen wird und CakePHP wieder geöffnet wird, ist "_the correct way_", was genau passiert, wenn 'session_abort()', "_doesnt work_" nicht verwendet wird? (es sollte funktionieren) – ndm

Antwort

0

Sie können überprüfen, ob die Sitzung bereits gestartet wurde, bevor Sie versuchen, session_start() aufzurufen.

if(!isset($_SESSION)) { 
    session_start(); 
} 
+0

Der Ablauf ist: Anfrage -> Caching-System -> CakePHP. Also kommt mein session_start vor die cakephp one und ich würde es vorziehen, cakephp core files nicht zu berühren, deshalb waren die anderen Fragen für mich nicht nützlich. Ich möchte dieses Problem lieber in meinem Caching-System lösen. –

+0

@ ToX82 Oh, Ok. Das war eine wichtige Information für die Frage. – iyop45

+0

Sie haben Recht :) Ich habe die Frage mit diesen Informationen bearbeitet, danke Ihrer Antwort –

Verwandte Themen