$_SESSION -Variablenverfügbarkeit bei register_globals=on
jens
- php
Hallo,
ich verstehe folgendes nicht:
in meinem test.php-files ist eine Klasse "required". Die Klasse selbst greift auf Funktionen in einer anderen Datei zu.
im test.php-file sind globale Variablen über die $_SESSION und zusätzlich noch per $_GET vorhanden.
Der Server läuft auf "register_globals=on"
Diese Variablen benötige ich in der Datei mit den Funktionen.
Dies $_SESSION-Variablen sind in diesen Funktionen nicht vorhanden. Sie sind leer! Warum?
session_start(); steht drin in der Datei mit den Funktionen, trotzdem verfügt er nicht über die $_SESSION-Variablen.
Müsste doch eigentlich funktionieren so oder verstehe ich da etwas falsch?
viele Grüße
Jens
Hallo,
Gib in der Klasse mal die $_SESSION aus:
<?php
//Class
echo "<pre>";
print_r($_SESSION);
echo "<br><hr><br>";
print_r($_GLOBALS);
echo "</pre>";
?>
Mit print_r gibt man sich das Array aus, und sieht den Inhalt der einzelnen Elemente.
Und kannst du die Daten in dem Script, welches die Class aufruft, die Session Werte ausgeben?
P.S. In $_GLOBALS sind alle Variablen global gespeichert, die bis dahin deklariert wurden.
MFG
Andavos
HI Andavos,
wenn ich Dein "echo" in die Klasse einbinde, wird folgendes ausgeworfen:
session order id = 5000326
Parse error: parse error, expecting T\_OLD\_FUNCTION' or
T_FUNCTION' or T\_VAR' or
'}'' in /home/sites/site1/web/test/shop/includes/classes/payment_quest.php on line 18
Fatal error: Cannot instantiate non-existent class: payment in /home/sites/site1/web/test/shop/checkout_payment_quest.php on line 140
die $order_id ist also vorhanden. (doch warum der FATAL ERROR?)
wenn die Klasse nun die Funktion aufruft, ist die order_id darin aber nicht mehr vorhanden. sollte sie das aber, oder muss ich sie explizit über $_GET übermitteln?
hier ein Funktionsaufruf aus der Klasse: es wird die Funktion in den Modulen aufgerufen, die der Zahlmethode entspricht, die auf der Weboberfläche vom User ausgewählt wurde.
function after_process_quest() {
if (is_array($this->modules)) {
if (is_object($GLOBALS[$this->selected_module]) && ($GLOBALS[$this->selected_module]->enabled) ) {
return $GLOBALS[$this->selected_module]->after_process_quest();
}
}
}
müsste die $_SESSION nicht automatisch auch in den Funktionen verfügbar sein? weisst Du, wie ich sie übergeben kann?
viele Grüße
Jens
echo $begrueszung;
Parse error: parse error, expecting
T\_OLD\_FUNCTION' or
T_FUNCTION' orT\_VAR' or
'}'' in /home/sites/site1/web/test/shop/includes/classes/payment_quest.php on line 18
Keiner außer dir weiß, wie Zeile 18 und Umgebung aussieht...
Fatal error: Cannot instantiate non-existent class: payment in /home/sites/site1/web/test/shop/checkout_payment_quest.php on line 140
Das sieht so aus, als ob es in dem Script keine Deklaration der Klasse payment gibt. Somit kann die Session-Verwaltung von PHP keine Instanz dieser Klasse erstellen.
echo "$verabschiedung $name";
Hi
Zeile 18 ist die erste Zeile im echo-Script in der Klasse:
echo "<pre>";
print_r($_SESSION);
echo "<br><hr><br>";
print_r($_GLOBALS);
echo "</pre>";
-----------
der Shop läuft leider nicht mit register-globals=off, deshalb müssen die immer on geschaltet bleiben.
------------
aber ist es eigentlich nicht so, dass die Funktionen automatisch den Wert von $_SESSION (das ist der Wert für die $order_id) erhalten muss?
alleine dadurch, dass die Funktion durch die Klasse, in der die $order_id vorhanden ist, diese Funktionen aufruft?
muss ich in den Funktionen session_start() definieren? habe ich zwar schon versucht, die $order_id war aber leer.
Mein Problem ist, dass die $order_id auf der Seite unbedingt erhalten bleiben muss, wenn das Script die Funktionen durchlaufen und wieder auf die Seite zurückgeworfen wird. Leider geht sie beim Funktionsaufruf verloren.
wie kann ich sie während des Durchlaufens der Funktionen aufrechterhalten?
viele Grüße
Jens
Hello,
der Shop läuft leider nicht mit register-globals=off, deshalb müssen die immer on geschaltet bleiben.
Da muss man sich besser eine neuere Version beschaffen von dem Shop oder einen neuen Shop.
Auf gar keinen Fall sollte man diese Einstellungen nur wegen des Shops auf alle anderen Scripte ausweiten. Wenn die Leute damals (als der Shop geschreiben wurde, mindestens vor vdrei Jahren!) noch gewusst haben, was sie tun, dann mag der alleine sogar sicher sein in dieser Einstellung, aber spätere Scripte nehmen darauf ggf. keine Rücksicht mehr.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo, vielen Dank,
habe gerade gelernt, dass ich in der Funktion selbst die $_SESSION schreiben muss, dass es nicht ausreicht, sie in der Klasse zu schreiben.
Jetzt bleibt die $order_id erhalten.
vielen vielen Dank für Eure Aufklärung bzgl. Sessions
Jens
echo $begrueszung;
Hi
Zeile 18 ist die erste Zeile im echo-Script in der Klasse:
echo "<pre>";
Die sieht in Ordnung aus, der Syntax-Fehler kommt durch irgendetwas, was davor steht zustande.
aber ist es eigentlich nicht so, dass die Funktionen automatisch den Wert von $_SESSION (das ist der Wert für die $order_id) erhalten muss?
Ja, $_SESSION ist eine superglobale Variable, die steht überall zur Verfügung
muss ich in den Funktionen session_start() definieren? habe ich zwar schon versucht, die $order_id war aber leer.
session_start() muss nur einmal aufgerufen werden.
Allerdings werden in einer Session nur die Werte der Objekt-Eigenschaften gespeichert, nicht die Deklaration der Klasse selbst. Vor dem Wiederherstellen der Session müssen die Klassen, der in der Session gespeicherten Objekte, wieder bekannt sein (Stichwort: include/require) Und dann kommt auch der von dir zitierte Fatal Error nicht mehr.
echo "$verabschiedung $name";
Hello,
Ja, $_SESSION ist eine superglobale Variable, die steht überall zur Verfügung
es steht aber nix drin, wenn man nicht selber 'wa reinscheibt ;-))
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
es ist extrem kompliziert, mit $_SESSION zu arbeiten und dabei register_globals = ON zu haben.
Es ist eigentlich auch zu müßig, noch zu erklären, was dabei alles schief gehen kann.
Mein Rat ist daher: sorge dafür, dass zumindest für Deinen Host (Virtual Host / Directory) das register_globals ausgeschaltet wird. Dann klappts nachher auch mit den Sessions.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom