[PHP] Classes & Sessions

Peter

Lt. Commander
Registriert
Mai 2001
Beiträge
1.957
Erstma ein Hallo in die Heimat :D

Ich muss für ein Verwaltungssystem die 'Sicherheitschicht' schreiben.
Das Ganze muss als Klasse realisiert werden. Diese Klasse ist im Groben zuständig um Sessions zu starten, wiederaufzunehmen und zu beenden sowie die Authentifizierung von Benutzern bei Seitenzugriffen vorzunehmen, etc ....

Da die meisten Variablen in diesem Skript globale Variblen sind (war nicht meine Idee) muss ich diese am Ende eines Skriptdurchlaufs in die Session speichern und beim nächsten Seitenaufruf wieder als globale Vars zu Verfügung zu stellen.

Nun habe ich aber das Problem, dass wenn ich eine Variable zum erstenmal registriere mit "session_register( $GLOBALS['varname']);" diese Variable nicht registriert wird und somit beim nächsten Seitenaufruf nicht mehr zur Verfügung steht. Definiere ich die Variable davor allerdings als "global varname;" und mache dann ein "session_register('varname');" funktioniert die Registrierung.
Da ich die Variablen nicht zwangsläufig kenne, da in die Software Plugins integriert werden können, wollte ich das $GLOBALS-Array eben in ener Schleife durchlaufen und die skriptrelevanten Variablen herausfischen.

Der Server läuft mit PHP 4.3.x und register_globals = off.

Hoffe auf baldige Inspiration ;)
 
Dein Vorschlag mit dem Array für die globalen Variablen klingt doch...mir fällt auf die schnelle nix ein was dagegen sprechen würde. Warum globals in deinem Script allerdings nicht verfügbar sind kann ich dir so nicht beantworten ;)
 
Habe heute extra wegen dem Problem eine WAMP und eine LAMP Kiste augesetzt mit dem Ergebnis, dass die Vars ebenfalls nicht gespeichert wurden :(

Und wenn ich "global varname;" und "session_register('varname');" benutze erhalte ich des Öfteren diese Warnung:
Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0

/* Nachtrag
habe ich vorhin einfach vergessen zu erwähnen:
$_SESSION['varname'] = $GLOBALS['varname'];
funktioniert auch nicht. Da bricht das Skript einfach mit der lapidaren Fehlermeldung ab, dass die Klasse nicht instanziert werden könne :D
Aber ich bin mir ziemich sicher in einem anderen Skikript schon einmal diese Syntax verwendet zu haben. Müsste doch eigentlich funktionieren, oder?
*/
 
Zuletzt bearbeitet:
Sobald register_globals auf off steht, solltest du nur noch $_SESSION verwenden.

Warum
Code:
$_SESSION['var'] = $GLOBALS['var']
nicht funktioniert kann ich mir aber auch nicht erklären.

Ich gehe davon aus, dass du sicher bist in $GLOBALS['var'] den erwarteten Wert vorzufinden.
 
Habe jetzt einen Workaround für das Problem gefunden. Ich speichere jetzt alle relevanten, globalen Variablen in ein neues Array und speichere dieses dann in der Session. Warum das nur auf die harte Tour funktionierrt ist mir bisher ein Rätsel.

Werde mich auf jeden Fall in den nächsten Tagen mal in dem php4all Forum umschauen, ob es dort eine plausible Erklärung gibt.

Da das Skript über den Umweg funktioniert gehe ich mal davon aus, dass die Variabelen, die ich benötige, richtig in dem Globals-Array stehen ;)

Auch wenn das Problem nicht wirklich beseitigt ist, trotzdem ein kleines Dankeschön an euch :)

Und falls ich die Ursache dieses Rätsels finde, lasse ich es euch wissen.
 
Zurück
Oben