PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sessions und Variablen - Anfängerfrage


mcSvenster
30.11.2005, 17:01:10
Sorry, vermutlich nerve ich gerade mit banalem Zeug, aber ich komme einfach nicht weiter:
BSP: Ich habe zwei PHP- Dateien ses1.php und ses2.php. In ses1.php starte ich die session mit session_start
$TestVariable = "Dicker Hund";
session_register("TestVariable");
Ein anschließendes html- Formular hat als action ses2.php zugewiesen.
In ses2.php habe ich ganz am Anfang den sesson_start gesetzt, aber die Variable kommt nicht an. Ich erhalte im Log folgende Fehlermeldung: Undefined variable: TestVariable in /Library/WebServer/Documents/lernen/ses2.php on line 4
Ich bin die Referenz auf php.net durchgegangen, war im php Quake net... Ich habe sessions offensichtlich nicht richtig verstanden.
Auch das abgetippte Beispiel im phpforum.de führt bei mir zum gleichen Fehler.

Hat von Euch jemand einen Tip für mich?
Dank und Gruß
Sven

Opendix
30.11.2005, 17:52:17
Wiesos net geht weis ich grad nicht, aber einen Tipp hab ich trotzdem *g*

// Ab PHP 4.1.0 ist die Verwendung von $_SESSION vorzuziehen
$_SESSION["zim"] = "An invader from another planet.";


Wie siehst den mit der Einstellung in der php.ini aus?

feuervogel
30.11.2005, 18:23:37
In ses2.php habe ich ganz am Anfang den sesson_start gesetzt,

und du hast sicher keine ausgabe und auch kein leerzeichen davor?

mcSvenster
30.11.2005, 19:25:00
Danke schonmal für den Tip, $_session werde ich mal versuchen.
@feuervogel: nein, keine Ausgabe, kein Fragezeichen, nichts an der url...

Habe ich das denn grundsätzlich richtig verstanden, dass man mit session_start eine session beginnt, in der Variablen so lange - auch über verschiedene Seiten - deklariert bleiben, bis man die session beendet bzw. der Browser geschlossen wird?

Gruß
Sven

feuervogel
30.11.2005, 19:48:53
Habe ich das denn grundsätzlich richtig verstanden, dass man mit session_start eine session beginnt, in der Variablen so lange - auch über verschiedene Seiten - deklariert bleiben, bis man die session beendet bzw. der Browser geschlossen wird?

Gruß
Sven

nur wenn du auf den verschiedenen seiten auch jeweils ganz am anfang session_start(); hinschreibst.

man kann eine session auch über das schließen des browser hinaus leben lassen, wenn man unbedingt will.

meikel (†)
30.11.2005, 20:18:14
starte ich die session mit session_start
$TestVariable = "Dicker Hund";
session_register("TestVariable");
1. bitte das Original! Das Script ist syntaktisch falsch.
2. daß die Funktion session_register() alt wie die Steinkohle ist, wurde schon gesagt.
3. ebenfalls unklar ist, wie Du dafür sorgst, daß die Session auf Seite 2 wieder aufgenommen werden kann. Irgend wie muß ja der Client die Session_id dem Server mitteilen: Cookie oder GET/POST Variable.

mcSvenster
01.12.2005, 10:54:23
Vielen Dank für Eure Hilfe! Die "Übertragung" der Session-ID war der entscheidende Hinweis. Ich wußte nicht, dass ich selbst dafür sorgen muss.

Gruß
Sven

meikel (†)
01.12.2005, 11:33:51
Ich wußte nicht, dass ich selbst dafür sorgen muss.
Dafür mußt Du dann sorgen, wenn der Client den Session Cookie nicht angenommen hat und session.use_trans_sid = Off ist.

Nutze dafür die Konstante SID, die von PHP nach session_start() in Abhängigkeit von der Konfiguration gefüllt wird.

GET:

echo '<a href="seite2.php?' . SID .'">Klick</a>';

Wenn Cookie:
URL = seite2.php?

Wenn kein Cookie:
URL = seite2.php?1234abcd1234abcd1234abcd1234abcd

POST:

echo '<form method="POST" action="seite2.php">';
if (SID == '')
echo '<input type="hidden" name="' . session_name() . '" value="' . session_id() . '">';
#...
echo '</form>';

Ggf. kannst Du auch das nutzen:
echo '<form method="POST" action="seite2.php?' . SID :'">';
#...
echo '</form>';
Diese Methode ist allerdings unsauber, wenn im POST Formular Variable per GET übermitteln werden. Der Client muß sowas nicht zwingend können!