Zum Inhalt springen

Update-Problem: ini_set Befehl "session.save_handler" wird ignoriert

Erstellt am 26. August 2011 · 1 Antwort · letzte Antwort am 22. September 2011

Tags: Frage

chewbacca1 ·

Hallo zusammen,

in einem unserer Projekte benutzen wir Typo3 4.1.2.
Mittels einem typoscript ("root.ts") und dem Befehl includeLibs.globalincphp = "fileadmin/php/includes/global_typo3.inc.php" wird ein user-basiertes Session Handling eingebunden:
ini_set("session.save_handler", "user");

Dieses funktionierte bisher auch einwandfrei.
Nach dem Update von 4.1.2 auf 4.5.4 funktioniert dieses Session Handling aber nicht mehr.
Der ini_set-Befehl wird jetzt nicht mehr ausgeführt.

Beispiel:
Gibt man in der Version 4.1.2 nach dem ini_set ein phpinfo() aus, sieht man, daß der Befehl sofort korrekt umgesezt wurde:
session.save_handler user files
In der neuen Version 4.5.4 sieht man in der phpinfo(), daß der Wert nicht geändert wird:
session.save_handler files files
Das Session Handling bleibt also auf "files".

Der ini_set-Befehl selber funktioniert und gibt einen korrekten Wert zurück:
$a = ini_set("session.save_handler", "user");
echo $a; // gibt "files" aus
(php.net - ini_set: Returns the old value on success, FALSE on failure.)
Andere Werte (z.B. display_errors) lassen sich mittels ini_set auch problemlos ändern.

Auf Seiten, die nicht direkt von Typo3 bereitgestellt werden (z.B. angepostete Form-Action Seiten) funktioniert das ganze wie bisher.

Weiß jemand woran das liegen kann?
Warum wird speziell der ini_set Befehl "session.save_handler" in der neuen Typo3 Version ignoriert?
Wie kann man Typo3 (bzw. php) dazu bringen das user-basierte Session Handling zu übernehmen?

Mit besten Grüßen
chewbacca1

chewbacca1 ·

Hallo zusammen,

das Problem konnte gelöst werden.

Der entscheidene Hinweis auf die Fehlerursache gab das Typo3 BE.
Unter Adminwerkzeuge->Protokoll stand folgende Meldung:
Core: Error handler (FE): PHP Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time. in fileadmin/php/includes/global_typo3.inc.php line 5

Der Fehler war, daß noch bevor unsere Datei „global_typo3.inc.php“ eingebunden wurde ein „session_start()“ aufgerufen wurde, und zwar in: \typo3_src\t3lib\class.t3lib_userauth.php Zeile 256.

Es mußte also dafür gesorgt werden, daß vor diesem session_start() Aufruf das user definierte Session-Handling aufgerufen wurde.

Dies konnte erreicht werden in dem die global_typo3.inc.php innerhalb der Seite typo3_src\index.php als erstes eingebunden wurde:
…
require_once("fileadmin/php/includes/global_typo3.inc.php");
…

Daraufhin funktionierte das ganze wieder.

Beste Grüße
chewbacca1