Problem mit Session-Klasse

Alles rund um PHP und die Datenbanksprache MySQL.

Moderatoren: Thies, Soltano

Antworten
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Problem mit Session-Klasse

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Benutzeravatar
Soltano
Moderator||Moderatorin
Moderator||Moderatorin
Beiträge: 48
Registriert: Sa 09 Aug, 2003 12:51 pm
Wohnort: Hessen
Kontaktdaten:

Beitrag 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*
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Benutzeravatar
NoKiA4LiFe
Newbie
Newbie
Beiträge: 14
Registriert: So 10 Aug, 2003 10:04 pm
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von NoKiA4LiFe »

Wieso machst du es nicht mit unset() ?

unset($_SESSION['key'])

habe mal gelesen das session_unregister() vom aussterben bedroht ist :D
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Benutzeravatar
Thies
Webmaster
Webmaster
Beiträge: 1482
Registriert: Mo 04 Aug, 2003 8:45 pm
Kontaktdaten:

Beitrag 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
if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Antworten