Frage

So auf einer PHP-Website einige Wartungsarbeiten ich tue, die $_SESSION Variablen verwendet. Ich begann einige sehr sehr seltsame Verhalten zu sehen, und nach Stunden Debuggen ich dies nur herausgefunden. Als Beispiel lässt, sagen, dass ich eine Session-Variable-Setup wie folgt aussehen:

$_SESSION['user']['id'] = 123;
$_SESSION['user']['firstname'] = 'John';
$_SESSION['user']['lastname'] = 'Doe';

An einem Punkt in einem Skript, ein Aufruf an eine MySQL-Tabelle gemacht wird einige Zend-Klassen:

$sql = "SELECT whatever FROM table";
$user = $db->fetchRow($sql);

Jetzt ist hier, wo die Seltsamkeit beginnt ... Nach dieser Datenbank Anruf getätigt wird, mein $_SESSION['user'] Array-Wert ist ganz plötzlich verändert, das Objekt zu sein, die aus dem Datenbank-Aufruf abgerufen wird ...

Grundsätzlich gilt: $_SESSION['user'] ist jetzt das gleiche wie das Objekt, das die fetchRow DB Methode abgerufen wurde unter Verwendung, die in der Variablen $user gespeichert sein sollte. Ich habe das noch nie gesehen.

Das einzige, was ich herausfinden kann, weil der Variablenname $user das gleiche wie die $_SESSION['user'] Array-Schlüssel Namen, seine, die als wie eine Abkürzung oder so etwas.

Ist das eine Art seltsamer PHP Session Verknüpfungen, die ich noch nie zuvor gehört habe?

Auf einer Seite zur Kenntnis, weiß ich, dass $_SESSION Zugriff auf Vars ist direkt nicht die beste Praxis. Ich habe nicht diese Website bauen. Meine Aufgabe ist es nur ein paar Sachen zu reparieren und einige Funktionen hinzuzufügen.

UPDATE: Sicher genug, register_globals aktiviert ist. Vielen Dank für die schnelle Hilfe Jungs. Kein Wunder, ich war so seltsames Verhalten zu sehen.

War es hilfreich?

Lösung

Klingt wie Sie register_globals in PHP.ini auf Ein gesetzt. Das Ausschalten sollte dieses Problem zu beheben.

Wenn Sie keinen Zugang zu PHP.ini ändern müssen eine alternative Lösung wird diskutiert hier

Andere Tipps

Überprüfen Sie, ob Globals registrieren eingeschaltet wird. Zugriff auf $ _SESSION ist die einzige Möglichkeit, die Sitzungsdaten sicher zugreifen .

Register Globals ist ein altes Feature, das globale Variablen in lokale Variablen umgewandelt. Das Problem mit, dass war man konnte nicht sicher wissen, woher die Daten kommen würden. Etwas, das man von einer Sitzung erwartet konnte mit einer Get, Post oder einem Cookie variabel eingestellt werden. So war es sehr einfach, die Sicherheit zu umgehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top