Seite 1 von 1

Problem mit Session-Klasse

Verfasst: So 10 Aug, 2003 12:45 pm
von Thies
Ich jabe ein Problem, das urplötzlich aufgetreten ist. Ich nutze für die Sessions-Verwaltung eine Klasse (Fremdscript: "Manueller" Session-Fallback mit PHP4)

Diese lief bisher auf allen Servern ohne Probleme. Auf einem Server (PHP Version 4.2.3, register_globals = On) kommt beim Aufrufen von:

$Session->unregister('uid', 'userid', 'userpw', 'userstatus', 'userrealname', 'autologin');

folgender Fehlerhinweis (mehrfach):

Warning: First argument to array_keys() should be an array in .../include/class.Session.inc on line 242

Auf einem anderen Server mit der gleichen Konfiguration (PHP Version 4.2.3, register_globals = On) habe ich diesen Fehlerhinweis nicht. Ich schaffe es aber nicht herauszufinden, woran es liegen könnte und was ich falsch gemacht habe.

Die Zeile 242 lautet:

$keyIndex = array_keys(array_keys($globalS["HTTP_SESSION_VARS"]), $arg);

Hier der Code der unregister-Function:

Code: Alles auswählen

### -------------------------------------------------------
/**
*    Variable aus den Session-Daten löschen
*    
*    Wenn PHP mit "register_globals=Off" konfiguriert ist,
*    ist das Session-Management ein wenig broken.
*    Diese Methode korrigiert das indem sie den entsprechenden
*    Index im $HTTP_SESSION_VARS-Hash löscht.
*
*    @param    string    Beliebige Anzahl von Variablennamen,
*                        die "unregistriert" werden sollen
*    @return    void
*/
    function unregister() {
        foreach(func_get_args() as $arg)
            {
                session_unregister($arg);
                
                $keyIndex = array_keys(array_keys($globalS["HTTP_SESSION_VARS"]), $arg);
                if (sizeof($keyIndex) == 0) continue;
                
                array_splice($globalS["HTTP_SESSION_VARS"], $keyIndex[0], 1); 
            }
    }
 
Weiss jemand eventuell, woran das liegen könnte, ich steige einfach nicht durch.

Danke

Frank-Andre
Webmaster | Admin

Verfasst: So 10 Aug, 2003 12:54 pm
von Soltano
Mhh ich hab da zwar nicht soviel ahnung aber eventuell nützt es ja was mal zu probieren... zB könnte man diesen befehl:
$globalS["HTTP_SESSION_VARS"]
durch diesen:
$_SESSION ersetzen

Weiss zwar nicht ob das was nützt aber probieren kann man es ja mal :D
*besseralskeineantwort*

Verfasst: So 10 Aug, 2003 1:23 pm
von Thies
Hätte mich zwar gewundert, wenn es damit gegeangen wäre, aber ich habe es probiert und die Fehlermeldung bleibt. :(

Komsicherweise habe ich hier auf dem Server diesselbe PHP-Version und die Probleme nicht.

Hat jemand noch eine Idee?

Frank-Andre
Webmaster | Admin

Verfasst: Di 12 Aug, 2003 10:53 am
von NoKiA4LiFe
Wieso machst du es nicht mit unset() ?

unset($_SESSION['key'])

habe mal gelesen das session_unregister() vom aussterben bedroht ist :D

Verfasst: Di 12 Aug, 2003 12:02 pm
von Thies
Die Klasse stammt nicht von mir und läuft bis auf den einen Server überall anders einwandfrei. Ich versuche jetzt herauszufinden, warum der eine Server mit derselben PHP-Version hier Zicken macht, die anderen aber nicht. Es ist also auch eine Verständnisfrage :)

Ich werde das mit unset mal probieren, ob das klappt, dann habe ich zwar eine Lösung, aber das Problem nicht gefunden :(

Frank-Andre

Verfasst: Fr 15 Aug, 2003 10:49 am
von Thies
Was mich halt verwundert hatte, war, dass es auf einem Server ging, auf dem anderen nicht, obwohl dieselbe PHP-Version genutzt wird.

Ich habe den Teil

Code: Alles auswählen

                $keyIndex = array_keys(array_keys($globalS["HTTP_SESSION_VARS"]), $arg);
                if (sizeof($keyIndex) == 0) continue;
                
                array_splice($globalS["HTTP_SESSION_VARS"], $keyIndex[0], 1); 


rausgenommen und vor session_unregister... die Zeile

Code: Alles auswählen

	    unset($arg);
ergänzt. Nun geht es ohne Fehlermeldung.

Ich weiss zwar immer noch nicht, was genau der Hintergrund war, aber hauptsache es funktioniert :)

Danke für Eure Hilfen

Frank-Andre