Problem gefunden in wp-settings.php
Hallo Leute,
nachdem ich im Internet nix neues oder hilfreiches zu diesem Thema mehr gefunden habe, habe ich mich halt doch mal an den SourceCode von WordPress herangewagt. So konnte ich wenigstens herausfinden wo der Frosch ins Wasser hüpft...
Nun ... hier meine Ergebnissse:
Aus welchem Grund auch immer gibt es in der Datei wp-settings.php eine Funktion names wp_unregister_GLOBALS(). Diese Funktion soll dafür sorgen, dass globale Variablen gesäubert werden. Leider beinhaltet diese Funktion auch $_SESSION. Daher werden bei jedem Aufruf von WordPress sauber die Werte in $_SESSION aufgeräumt bzw. weggeschmissen. Sehr zu meinem Erstaunen, da daher das ganze $_SESSION-Prinzip keinen Sinn macht.
Um hier nun abhilfe zu schaffen muss man folgende Änderung (Hack) vornehmen:
Hier der originale Code aus der Version 2.6.0 von WordPress:
function wp_unregister_GLOBALS() {
if ( !ini_get('register_globals') )
return;
if ( isset($_REQUEST['GLOBALS']) )
die('GLOBALS overwrite attempt detected');
// Variables that shouldn't be unset
$noUnset = array('GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix');
$input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES, [B]isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()[/B]);
foreach ( $input as $k => $v )
if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) {
$GLOBALS[$k] = NULL;
unset($GLOBALS[$k]);
}
}
Alles anzeigen
Man beachte dabei die Zeile mit ...[FONT="Courier New"], isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()[/FONT] ... Hier werden die Werte in $_SESSION in das Array aufgenommen, das schliesslich dann durchlaufen wird, um die Werte aufzuräumen (Was in diesem Falle natürlich nicht in meinem Sinne ist).
Und hier nun die modifizierte Variante:
function wp_unregister_GLOBALS() {
if ( !ini_get('register_globals') )
return;
if ( isset($_REQUEST['GLOBALS']) )
die('GLOBALS overwrite attempt detected');
// Variables that shouldn't be unset
$noUnset = array('GLOBALS', '_GET', '_POST', '_COOKIE', '_REQUEST', '_SERVER', '_ENV', '_FILES', 'table_prefix');
$input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_FILES); [B]// , isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array()[/B]
foreach ( $input as $k => $v )
if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) {
$GLOBALS[$k] = NULL;
unset($GLOBALS[$k]);
}
}
Alles anzeigen
Nach dieser Modifikation läuft das ganze wie gewünscht. Es lassen sich ohne weitere Probleme Werte in $_SESSION schreiben und lesen.
Vielen Dank für die Aufmerksamkeit und vielleicht hilfts ja auch jemand anderem weiter.
Cheers,
Bernd