Fehlermeldung "session_start(): Ignoring session_start()"

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Moin Zusammen,

seit Neuestem bekomme ich diese Fehlermeldung in errorlog.txt:

[19-Oct-2024 11:16:43 UTC] PHP Notice: session_start(): Ignoring session_start() because a session is already active (started from /var/www/btmr/contenido/classes/class.session.php on line 110) in /var/www/btmr/contenido/includes/frontend/include.front_content.php(715) : eval()'d code on line 253

Eine Idee, was das sein könnte?
---
Munterbleiben... Bernhard
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von xmurrix »

Hallo Bernhard,

der Hinweis besagt, dass versucht wurde, die Session zu starten, die Session aber schon vorher gestartet ist.

Das kann passieren, wenn man die Funktion session_start() mehrmals aufruft.

Da der Hinweis in der include.front_content.php in Zeile 715 vorkommt, also beim Auswerten des Codes der Seite, kannst du davon ausgehen, dass irgendwo in einem Layout, in einem Modul oder in einem Plugin session_start() aufgerufen wird.

Normalerweise braucht man das nicht, da die Session eigentlich schon beim Initialisieren von CONTENIDO gestartet wird, also schon vor include.front_content.php (Zeile 715). In CONTENIDO wird die Session beim Aufruf der Funktion cRegistry::bootstrap() gestartet.

Falls in einem Layout, in einem Modul oder in einem Plugin session_start() benötigt wird, sollte man das vorher prüfen, z. B. mit:

Code: Alles auswählen

if (isset($_SESSION)) {
    session_start();
}
Manche Formular- oder Captcha-Module arbeiten mit der Session, daher kann es sein, dass es in einem solcher Module vorkommt.

Lange Rede kurzer Sinn:
Es ist ein Hinweis und kein Fehler, du kannst das auch ignorieren.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Hallo Murat,
xmurrix hat geschrieben: So 20. Okt 2024, 13:05 Lange Rede kurzer Sinn:
Es ist ein Hinweis und kein Fehler, du kannst das auch ignorieren.
das wollte ich lesen! Vielen Dank dafür. :wink:
---
Munterbleiben... Bernhard
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Der Aufruf kommt übrigens tatsächlich nur hier vor: class.session.php on line 110 Ich habe das, wie von Dir vorgeschlagen, durch ein isset() abgefangen und werde das beobachten.
---
Munterbleiben... Bernhard
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von xmurrix »

Bernhard_4711 hat geschrieben: So 20. Okt 2024, 17:55 Der Aufruf kommt übrigens tatsächlich nur hier vor: class.session.php on line 110 Ich habe das, wie von Dir vorgeschlagen, durch ein isset() abgefangen und werde das beobachten.
Eigentlich sollte das nicht sein, da das in class.session.php schon in Zeile 84 - 86 geprüft wird:

Code: Alles auswählen

        if (isset($_SESSION)) {
            return;
        }
Die Variable $_SESSION existiert erst dann, wenn auch session_start() aufgerufen wurde.
Falls also irgendwo schon session_start() aufgerufen wird, sollte die Prüfung in class.session.php in Zeile 84 - 86 das erkennen und somit den erneuten Aufruf von session_start() umgehen.

Warum das bei dir nicht funktioniert, kann ich leider nicht sagen, das müsste genauer untersucht werden.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Habe ich auch gerade gesehen. Mein isset() ist sinnlos, wenn die Variable $_SESSION bereits existiert. Dann wird die Funktion __construct direkt in der Zeile 85 mit einem

Code: Alles auswählen

return;
beendet. Und ich glaube kaum, daß diese Variable in dieser Funktion direkt nach der Abfrage in Zeilen 84-86 gesetzt wird. Daher wird auch mein nun maskierter

Code: Alles auswählen

session_start();
nicht ausgeführt. Könnte sein, daß ich dadurch eine gewünschte Funktionalität gekillt habe. Ich nehme das daher wieder raus.
...und, schwupp, kommen wieder diese Meldungen wegen bereits gestarteter Session... :roll:
---
Munterbleiben... Bernhard
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von xmurrix »

Die Prüfung der PHP-Session in class.session.php schon in Zeile 84 - 86 ist mit hoher Wahrscheinlichkeit fehlerhaft.
Besser wäre es, wenn man die Stelle

Code: Alles auswählen

        if (isset($_SESSION)) {
            return;
        }
in wie folgt ändert:

Code: Alles auswählen

        if (in_array(session_status(), [PHP_SESSION_DISABLED, PHP_SESSION_ACTIVE])) {
            return;
        }
Ich erstelle mal ein Ticket in GitHub dazu. Danke dir für den Hinweis.

Nachtrag:
Das Ticket #508 dazu im Github.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Und was ist mit dem Aufruf von

Code: Alles auswählen

session_start()
in class.session.php?
Ich habe die Zeilen 84-86 mal wie von Dir vorgeschlagen geändert und werde das beobachten.
---
Munterbleiben... Bernhard
xmurrix
Beiträge: 3213
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von xmurrix »

Bernhard_4711 hat geschrieben: Do 24. Okt 2024, 12:13 Und was ist mit dem Aufruf von

Code: Alles auswählen

session_start()
in class.session.php?
Ich habe die Zeilen 84-86 mal wie von Dir vorgeschlagen geändert und werde das beobachten.
Die Funktion der Klasse cSession (class.session.php) ist es, die Session zu mit den entsprechenden Optionen zu starten und die Einträge darin zu verwalten.

Am Anfang der Konstruktor-Funktion sollte geprüft werden, ob die Session schon gestartet wurde, falls ja, dann sollte die Session nicht erneut gestartet werden. Das würden folgende Zeilen übernehmen:

Code: Alles auswählen

        if (in_array(session_status(), [PHP_SESSION_DISABLED, PHP_SESSION_ACTIVE])) {
            return;
        }
Falls die Sessions deaktiviert sind oder eine Session schon existiert, wird die Funktion verlassen. Ansonsten wird die weitere Logik ausgeführt, die die Session startet.

Ich würde aber an deiner Stelle prüfen, wer überhaupt die Session gestartet hat. Passiert das in einem Modul oder in einem Plugin, oder ist PHP so eingestellt, dass die Session automatisch startet?

Falls die Session nicht mit der Klasse cSession gestartet wird, können die für die Session konfigurierten Optionen nicht gesetzt werden.

Hinweis:
Den Codeschnipsel in meiner vorherigen Antwort habe ich korrigiert, die war falsch.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

xmurrix hat geschrieben: Do 24. Okt 2024, 12:42 Ich würde aber an deiner Stelle prüfen, wer überhaupt die Session gestartet hat. Passiert das in einem Modul oder in einem Plugin, oder ist PHP so eingestellt, dass die Session automatisch startet?
Wie kann ich das ermitteln?
Hinweis:
Den Codeschnipsel in meiner vorherigen Antwort habe ich korrigiert, die war falsch.
Ok, habe ich geändert. :wink:
---
Munterbleiben... Bernhard
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Oldperl »

Servus,
Bernhard_4711 hat geschrieben: Fr 25. Okt 2024, 11:19 Wie kann ich das ermitteln?
Du kannst im Code-Cache (cms/cache/code) in die con-code PHP-Dateien schauen, und diese nach einem Sessionstart durchsuchen.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Code: Alles auswählen

session_start
taucht genau einmal auf: In der Datei class.session.php!

Und nach der durchgeführten Änderung des Codes in den Zeilen 84 bis 86

Code: Alles auswählen

        if (in_array(session_status(), [PHP_SESSION_DISABLED, PHP_SESSION_ACTIVE])) {
            return;
        }
auch wieder im Error-LOG... :(
---
Munterbleiben... Bernhard
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

Kann ich den Zustand von session_status() protokollieren, von mir aus in der errorlog.txt?
---
Munterbleiben... Bernhard
bodil
Beiträge: 372
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 2 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von bodil »

Probier es mal mit

Code: Alles auswählen

error_log(var_export( session_status(), true));
(var_export() funktioniert so ähnlich wie var_dump(). Mit dem true als zweitem Parameter wird das Ergebnis allerdings nicht auf den Bildschirm geschrieben, sondern als String zurückgegeben. So kann man sich im Log auch Variablen anschauen, die nicht direkt als String darstellbar sind, Arrays zum Beispiel.)
Bernhard_4711
Beiträge: 155
Registriert: Do 25. Jul 2019, 16:08
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Fehlermeldung "session_start(): Ignoring session_start()"

Beitrag von Bernhard_4711 »

bodil hat geschrieben: Mo 28. Okt 2024, 08:37 Probier es mal mit

Code: Alles auswählen

error_log(var_export( session_status(), true));
Das habe ich direkt vor die Zeile 84 der Datei class.session.php gesetzt.
Das Ergebnis sieht so aus:

Code: Alles auswählen

[28-Oct-2024 12:03:35 UTC] 1
[28-Oct-2024 12:03:35 UTC] PHP Notice:  session_start(): Ignoring session_start() because a session is already active (started from /var/www/btmr/contenido/classes/class.session.php on line 113) in /var/www/btmr/contenido/includes/frontend/include.front_content.php(715) : eval()'d code on line 244
, wobei die "1" durchaus öfter hintereinander ausgegeben wird.
Ich weiß somit nicht, ob das

Code: Alles auswählen

return;
ausgeführt wird, oder nicht.
Auch gibt es mehrere Einträge mit der Fehlermeldung hintereinander, ohne daß eine "1" ausgegeben wird.
Ich müßte die Ausgabe also differenzieren, z.B. mit einem frei belegbaren Text ("vor dem return;" oder "return; wird gleich ausgeführt") oder so.
Ginge das auch?
---
Munterbleiben... Bernhard
Antworten