PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Sessions


Sertl
21.12.2003, 23:19:46
Hi,

hier registriere ich die Session

session_start();
$nummer = "404";
if(session_register("nummer")) echo "Variable - Nummer -registriert!";
$name = "Benutzer";
if(session_register("name")) echo "Variable - Name - registriert!";
echo "<a href='umfragen.php'>Weiter</a>";

Der Link bring mich auf eine andere Seite, auf der die Variablen ausgegeben werden

$result = session_start();
echo session_id();
if(session_is_registered("name")){echo "Name ist registriert!";}
if(session_is_registered("nummer")){echo "Nummer ist registriert!";}
if($result)
{
echo "Hallo $name! Ihre Nummer ist $nummer.";
}
else
{
echo "Keine Session erlaubt";
}

Auf dieser Seite wird dann ausgegeben, dass beide Variablen registriert wurden, allerdings werden ihre Werte nicht ausgegeben!
Woran kann das liegen? falsche Einstellungen in der php.ini? Oder...

mfg

Andreas

xabbuh
21.12.2003, 23:49:48
Du musst die Werte mit $_SESSION['name'] und $_SESSION['nummer'} statt $name und $nummer ausgeben lassen.

Sertl
22.12.2003, 00:05:04
Hi,

ne funzt auch nicht die Variablenwerte werden immer noch nicht ausgegeben.

Ich hab jetzt mal zusätzlich noch die Session-id ausgeben lassen. Das funktioniert dann!

Kann es vielleicht an falschen Einstellungen in der php.ini liegen.

mfg

Andreas

meikel (†)
22.12.2003, 02:24:52
Original geschrieben von Sertl
hier registriere ich die Session

session_start();
$nummer = "404";
if(session_register("nummer")) echo "Variable - Nummer -registriert!";
$name = "Benutzer";
if(session_register("name")) echo "Variable - Name - registriert!";
echo "<a href='umfragen.php'>Weiter</a>";

Der Link bring mich auf eine andere Seite, auf der die Variablen ausgegeben werden
Und woher weiß die andere Seite von der Session?

$result = session_start();
if($result)

RTFM! "Diese Funktion gibt immer TRUE zurück."

Sertl
22.12.2003, 11:02:42
Durch das Session_start() weiß die andere Seite, dass eine Session gestartet wurde.

Diese Funktion hat nämlich zwei Aufgaben eine Session zu starten oder wieder aufzunehmen.

In meinem Fall ist es ja so, dass die nachfolgende Seite die Session wieder aufnimmt, da die Session_id beider Seiten gleich ist, allerdings scheint es, dass die Werte aus den Variablen nicht gelesen werden können oder sie gar nicht mehr existent sind.

Außerdem ist der Rückgabewert der Funktionen nicht immer true, in dem Fall dass es nicht erlaubt ist Cookies beim Benutzer abzulegen, ist der Rückgabewert false.

meikel (†)
22.12.2003, 11:15:50
Original geschrieben von Sertl
Durch das Session_start() weiß die andere Seite, dass eine Session gestartet wurde.
Da irrst Du Dich. PHP weiß nur dann was von der Original Session, wenn die Session ID entweder per Keks oder im HTTP Protokoll mitgeliefert wird: GET, POST. Zusätzlich sind noch session.use_cookies, session.use_only_cookies und besonders session.use_trans_sid entscheidend, wie PHP auf session_start() reagiert.

Außerdem ist der Rückgabewert der Funktionen nicht immer true, in dem Fall dass es nicht erlaubt ist Cookies beim Benutzer abzulegen, ist der Rückgabewert false.
Ich zitierte das PHP Handbuch.
$var = session_start(); ist Unfug.

Ist auf der Folgeseite $_SESSION[ini_get('session.name')] nicht gesetzt, startet PHP eine neue Session, die natürlich nix von der ursprünglichen Session weiß.

Sertl
22.12.2003, 11:35:12
Hi,

ich lasse mich ja gerne berichtigen, Hauptsache es funktioniert dann endlich.

Das Beispiel habe ich aus einem PHP-Buch.

Wie würdest du denn dann die Umsetzung machen und welche Einstellungen muss ich in der php.ini vornehmen.

mfg

Andreas

René_M
22.12.2003, 12:06:16
Hi,

falls ich mich jetzt irre bitte korriegieren.

in der ersten Seite schreibst du
$nummer = "404";
if(session_register("nummer")) echo "Variable - Nummer -registriert!";

damit registrierst du die SESSION aber diese ist ohne Inhalt was noch fehlt ist:
$_SESSION['nummer'] = $nummer;

Um dann den Inhalt auf der nächsten Seite auszugeben muss das verwendet werden.
echo $_SESSION['nummer'];

Ich würde den Code in der ersten Seite so schreiben:
session_start();

$nummer = '404';
$_SESSION['nummer'] = $nummer;

if(session_is_registered('nummer')) echo "Variable - Nummer -registriert!";

...

meikel (†)
22.12.2003, 12:13:50
Original geschrieben von Sertl
Das Beispiel habe ich aus einem PHP-Buch.
Ein Grund, das Buch wegzuschmeißen.
Wie würdest du denn dann die Umsetzung machen und welche Einstellungen muss ich in der php.ini vornehmen.
http://www.dclp-faq.de/q/q-sessions-wie.html

Das Beispiel aus der FAQ geht aber von einem wohlwollenden User aus, der nix gegen Kekse hat. Verweigert der User aber den Keks, ist die Session gestorben, wenn man Session Name und Session ID nicht mit übermittelt.

PHP setzt in dem Falle die Konstante SID.

Die einfachste Möglichkeit festzustellen, ob in Formularen oder Links die Angabe von session_name und session_id erforderlich ist:


printf ('<a href=index.php%s>nächste seite</a>', (defined('SID')) ? '?'.SID : '');


Oder im Formular:

if (defined('SID')) printf ('<input type="hidden" name="%s" value="%s">', session_name(), session_id());


Man kann weiterhin noch die Konfigvariable (so man Zugriff auf die php.ini hat) session.use_trans_sid = 1 setzen. Dann loft das 'transparent' ab.

Sertl
22.12.2003, 12:16:09
Hi,

danke jetzt gehts!

mfg

Andreas

meikel (†)
22.12.2003, 12:20:15
Original geschrieben von René_M
falls ich mich jetzt irre bitte korrigieren.´
Deine Beispiele sind schon richtig. Und es funktioniert auch, wenn der User nix gegen Cookies hat. Isses aber einer von denen, die in Computer BILD gelesen haben "Cookies sind böse!", dann ist die Session weg, weil der Webserver nicht hellsehen kann. Dann muß im Link als GET Parameter
<a href='naechste-seite.php?PHPSESSID=dfa1234...'> session_name und session_id drangehängt werden. Bei POST (Formular) muß die Session dann als input hidden vorhanden sein.

René_M
22.12.2003, 12:51:17
... oder er hat eben pech wenn er nichtmal einen Sitzungskeks akzeptiert. ;-)

<?php

session_cache_limiter('nocache');
session_cache_expire(0);
session_start();

...

?>

meikel (†)
22.12.2003, 13:16:37
Original geschrieben von René_M
... oder er hat eben pech wenn er nichtmal einen Sitzungskeks akzeptiert. ;-)
Sowas muß man abfangen. Besonders auf Seiten, wo User = König Kunde ist.