Erri: Woran erkenne ich, dass Session-ID übergeben wurde?

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

  1. 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

    1. 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

      1. 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

        1. 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

          1. 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

    2. 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

  2. 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

    1. 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?SID

      Gib 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

      1. 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

        1. 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

          1. 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

      2. 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