Woran erkenne ich, dass Session-ID übergeben wurde?
Erri
- php
0 Stefan0 Dieter Raber0 Erri
0 Dieter Raber
Hi,
ich bin gerade dabei, mich mit Session zu beschäftigen mithilfe des Buches "Programmieren lernen in PHP 4".
Darin befindet sich ein Script, bei dem die Session ID mit der URL übergeben werden soll.
Hier das Script:
<?php
$PHP_SELF = $_SERVER["PHP_SELF"]; //Habe ich hinzugefügt, weil register_globals = off
session_start();
?>
<html>
<body>
<?php
$sessid = session_id();
echo "Die Session ID ist: $sessid";
echo "<br><br><a href="$PHP_SELF?<?=SID?>">Restart</a>";
// <?=SID?> habe ich lt. Hinweis im Buch hinzugefügt, weil bei mir die Option session.use_trans_sid auf Off steht
?>
</body>
</html>
Woran erkenne ich, dass die SID mit übergeben wird?
Ich dachte, dass in der URL des Browsers nach betätigen des Links "Restart" so eine URL angezeigt werden müsste:
http://session_id.php?6efacc149dc3cd1fd09039de4e9b9284
Bei mir wird aber merkwürdiger Weiße das angezeigt:
http://session_id.php?<?=SID?>
Habe ich hierbei nur ein Verständnisproblem, oder ist wirklich etwas falsch und wenn ja, woran könnte das liegen?
Vielen Dank schon einmal im Vorraus.
Viele Grüße
Erri
Hi,
ändere
echo "<br><br><a href="$PHP_SELF?<?=SID?>">Restart</a>";
mal in
echo "<br><br><a href="$PHP_SELF?SID=$session_id">Restart</a>";
und noch besser, weil sauberer
echo "<br><br><a href="" . $PHP_SELF . "?SID=" . $session_id. "">Restart</a>";
Zum Verständnis:
Der Ausdruck <?=SID?> setzt sich zusammen aus:
<? um dem PHP-Interpreter anzuzeigen, daß php-Code folgt
=SID als Kurzform für "echo SID;"
?> um den PHP-Code wieder zu schließen.
Da der PHP-Interpreter aber schon gestartet ist, und Du diesen Ausdruck innerhalb des echo "<?=SID?>" benutzt, wird der Ausdruck gar nicht interpretiert, sondern einfach nur ausgegeben.
Ob Du also
echo "<?=SID?>" ;
oder
echo "<? irgendein Text ?>"
ausgibst, ist an dieser Stelle völlig egal, es wird einfach ausgegeben.
Wenn Du
echo "<br><br><a href="" . $PHP_SELF . "?SID=" . $session_id. "">Restart</a>";
diese Zeile mal splittest, kannst Du auch schreiben:
echo "<br><br><a href=""; // ein string -> öffnet den Link
echo $PHP_SELF; // eine Variable -> gibt die Url des Scripts aus
echo "?SID="; // ein string -> gibt den Url-Parameter-Name SID aus
echo $session_id; // eine Variable -> gibt die Variable $session_id aus
echo "">Restart</a>"; // ein string -> schließt den Link.
Vielleicht verdeutlicht das nochmal die Bestandteile der echo-Zeile.
Gruß,
Stefan
Hallo,
mal in
echo "<br><br><a href="$PHP_SELF?SID=$session_id">Restart</a>";
Das ist so nicht richtig.
Die Konstante SID enthaelt den Sessionnamem, ein Gleichheitszeichen und die SessionID, also PHPSESSID=f0b5llb36rejt0vvb6pko0vqo5
Dieter
Hi,
Das ist so nicht richtig.
Die Konstante SID enthaelt den Sessionnamem, ein Gleichheitszeichen und die SessionID, also PHPSESSID=f0b5llb36rejt0vvb6pko0vqo5
Jou, stimmt... ich hab das bisher immer Cookie-basiert regeln können.
Das Handbuch sagt aber auch:
http://de3.php.net/session_id
"Beachten Sie, dass SID nur definiert ist, wenn vom Client nicht das richtige Cookie gesendet wurde."
Allerdings ist meine Syntax dann trotzdem Mist. :)
Gruß, Stefan
Hi,
"Beachten Sie, dass SID nur definiert ist, wenn vom Client nicht das richtige Cookie gesendet wurde."
also müsste doch bei der Variante des Buches SID definiert sein:
<a href="<?=$PHP_SELF?>?<?=SID?>">Restart</a>
Meine Cookies habe ich deaktiviert...
Ich verstehe nicht, warum SID beim übergeben leer ist???
Viele Grüße
Erri
Moin!
Meine Cookies habe ich deaktiviert...
Die vorhandenen auch komplett gelöscht und auf Nachfragen beim Setzen von Cookies gestellt?
Ich verstehe nicht, warum SID beim übergeben leer ist???
Wenn PHP ein Cookie mit einer Session-ID erhält, wird SID leergelassen, damit es nicht unnütz an die Links drangehängt wird.
- Sven Rautenberg
Hi Stefan,
vielen Dank für deine Antwort.
echo "<br><br><a href="" . $PHP_SELF . "?SID=" . $session_id. "">Restart</a>";
Da muss man doch aber erst die Var. $session_id erzeuegen.
Laut meines Buches kann man eine Konstante SID benutzen:
<a href="<?=$PHP_SELF?>?<?=SID?>">Restart</a>
(Vorhin hatte ich nur den Fehler gemacht, dass ich diesen HTML-Tag in PHP geschrieben habe...)
Dies funktioniert aber auch nicht, obwohl es laut Buch funktionieren sollte.
Viele Grüße
Erri
Hallo Erri,
echo "<br><br><a href="$PHP_SELF?<?=SID?>">Restart</a>";
Hier liegt der Fehler, es muss heissen <a href="$PHP_SELF?SID
Gib auf der Seite die Session aus mit
if ($_SESSION) print_r($_SESSION);
Dieter
Hi Dieter,
veielen Dank für deinen Hinweis.
echo "<br><br><a href="$PHP_SELF?<?=SID?>">Restart</a>";
Hier liegt der Fehler, es muss heissen <a href="$PHP_SELF?SIDGib auf der Seite die Session aus mit
if ($_SESSION) print_r($_SESSION);
Also meinst du so?
<?php
$PHP_SELF = $_SERVER["PHP_SELF"];
session_start();
?>
<html>
<body>
<?php
$sessid = session_id();
echo "Die Session ID ist: ";
if ($_SESSION) print_r($_SESSION);
echo "<br><br><a href="$PHP_SELF?SID">Restart</a>";
?>
</body>
</html>
So wird aber weder eine SID ausgegeben, noch übergeben.
Oder habe ich es falsch verstanden?
Viele Grüße
Erri
Hallo Erri,
Ich hab hier mal alles rausgenommen, was nicht so dringend notwendig ist:
<?php
session_start();
$_SESSION['foo'] = 'bar';
print SID;
print $_SESSION['foo'];
print '<a href="' . $_SERVER["PHP_SELF"] . '?' . SID . '">Restart</a>';
?>
Cookies sind abgeschaltet, ist das so klarer?
Dieter
Hi Dieter,
Ich hab hier mal alles rausgenommen, was nicht so dringend notwendig ist:
<?php
session_start();
$_SESSION['foo'] = 'bar';
print SID;
print $_SESSION['foo'];
print '<a href="' . $_SERVER["PHP_SELF"] . '?' . SID . '">Restart</a>';
?>
Jetzt wird die SID einmal übergeben...
Ich verstehe aber irgendwie das Array nicht, obwohl ich schon weiß, dass es so verwendet wird, wenn register_globals = off ist.
Könntest du mir diese 3 Zeilen erklären?
$_SESSION['foo'] = 'bar';
print SID;
print $_SESSION['foo'];
Wäre echt nett.
Viele Grüße und vielen Dank
Erri
Hallo,
$_SESSION['foo'] = 'bar';
Ich schreibe in das Sessionarray, in der Schluessel 'foo' den Wert 'bar'. Ich will damit nur erreichen, dass in der Session irgendwas drinsteht, damit es auch was zu sehen gibt.
print SID;
ich gebe den Inhalt von SID aus.
print $_SESSION['foo'];
Ich gebe den Wert von $_SESSION['foo'] aus.
Jetzt muesste auf dem Bildschirm sowas stehen wie
PHPSESSID=da6jefml25nvj26ml7bal0lm16
bar
Das zeigt, dass alles funktioniert hat.
Dieter
Hi,
Also meinst du so?
<?php
$PHP_SELF = $_SERVER["PHP_SELF"];
session_start();
?>
<html>
<body>
<?php
$sessid = session_id();
echo "Die Session ID ist: ";
if ($_SESSION) print_r($_SESSION);
echo "<br><br><a href="$PHP_SELF?SID">Restart</a>";
?>
</body>
</html>So wird aber weder eine SID ausgegeben, noch übergeben.
Oder habe ich es falsch verstanden?
Kann es möglicherweise sein, dass die Konstante SID nicht definiert ist?
Weil im Handbuch folgendes steht, wie Stefan meinte:
"Beachten Sie, dass SID nur definiert ist, wenn vom Client nicht das richtige Cookie gesendet wurde."
Ich habe es aber auch probiert, wenn ich alle Cookies angenommen habe, aber auch wenn ich alle Cookies verweigere. Also kann es daran doch auch nicht liegen.
Viele Grüße
Erri