Claudia Schaffner: Probleme mit Session

Hallo Leute,

ich bin ziemlich neu mit php und möchte mich nun mit sessions versuchen.

Meine php Version ist 4.3.3 aber irgendwie läuft das php script nicht so ich es will.

Soweit ich das verstanden habe erzeuge ich mit session_start(); eine neue Session oder lade eine bestehende Session rein.
Also muss ich doch schonmal auf jeder php Seite, die mit Session Variablen arbeiten soll dieses session_start(); als aller erstes aufrufen, oder?

Bei mir beginnt also jede Seite mit:

<?
 @session_start();

?>

Auf der ersten Seite, wo sich jemand anmelden soll hab ich noch folgendes gemacht:

if (!isset($_SESSION['username'])) {
  $_SESSION['username'] = "";
 }
 if (!isset($_SESSION['passwort'])) {
  $_SESSION['passwort'] = "";
 }

Ist doch auch noch soweit richtig, oder?

Jetzt dachte ich erst, ich könnte auch direkt auf $username und $passwort zugreifen bzw. damit die gleichen Variablen ansprechen, aber dem ist wohl nicht so. Dementsprechend kann ich auch nicht in einem Formular die Eingaben direkt in Session Variablen speichern, oder?

Also hab ich das händisch nach Abschicken des Formulars gemacht:

$_SESSION['username'] = $username;
$_SESSION['passwort'] = $passwort;

Was auch soweit funktioniert.

Nun müsste ich doch auch auf jeder weiteren Seite, diese Werte angezeigt bekommen (vorrausgesetzt ich starte die Seite mit session_start();)

Aber dort bekomme ich den Inhalt der Session Variablen nicht ausgegeben.

Was mache ich denn nun falsch?

  1. Was mache ich denn nun falsch?

    DU musst die Variablen die zur session hinzugefügt werden sollen über die session_register() funktion deklarieren
    siehe hierzu auch den Link
    http://de2.php.net/manual/de/function.session-register.php

    des weitern frage ich mich was das @ vor session_start soll??
    ein einfaches session_start() reicht aus.

    1. Was mache ich denn nun falsch?

      DU musst die Variablen die zur session hinzugefügt werden sollen über die session_register() funktion deklarieren
      siehe hierzu auch den Link
      http://de2.php.net/manual/de/function.session-register.php

      des weitern frage ich mich was das @ vor session_start soll??
      ein einfaches session_start() reicht aus.

      Aber wie hab ich denn nun das hier zu verstehen:

      Wenn Sie wollen, dass ihr Script unabhängig von der Einstellung von register_globals  funktioniert, müssen Sie stattdessen das Array $_SESSION  verwenden, weil $_SESSION-Einträge automatisch registriert werden. Wenn Sie in Ihrem Script session_register() verwenden, funktioniert es nicht in Umgebungen, in denen die PHP-Anweisung register_globals  deaktiviert ist.

      Ich hab das so verstanden, dass session_register nicht funktioniert, wenn ich register_globals deaktiviert hab.

      Unabhängig von der Einstellung müsste es doch dennoch eine Möglichkeit geben mit den Session Variablen arbeiten zu können, ohne eben session_register verwenden zu müssen, oder?

      1. Mit echo  $_SESSION['username']; solltest du es auslesen können:

        Aber ich wurde eh eine Zufallsvaribler 30Zeiche etwa generieren und mit session_register(Variable) als Session setzen und auch noch in die DB speichern. Bei jeder Seite kannst du dann diese Varible aus der DB lesen und mit der Session vergleichen: Bringt viele Vorteile wie z. B. Statistiken etc

        1. Mit echo  $_SESSION['username']; solltest du es auslesen können:

          schön, aber genau das funktioniert auf der zweiten Seite nicht mehr.

          So sieht Seite 1 aus (start.php)

          <?
           @session_start();
           if (!isset($_SESSION['username'])) {
            $_SESSION['username'] = "";
           }
           if (!isset($_SESSION['passwort'])) {
            $_SESSION['passwort'] = "";
           }

          ?>
          <html>
          <head>
          <title>Test mit Session-ID arbeiten</title>
          <?
          include ("/config.php");
          echo "<link rel=stylesheet type="text/css" href="$pfadhtml/styles/styles.css">";
          ?>
          </head>
          <body>
          <br>
          <?
           $_SESSION['username'] = $username;
           $_SESSION['passwort'] = $passwort;
          ?>
          <br>
          <form name="start" method=POST action="start.php">
          <table border=0>
           <tr><td>Loginname: </td><td><input type="text" name="username" size=20></td></tr>
           <tr><td>Passwort: </td><td><input type="text" name="passwort" size=20></td></tr>
           <tr><td colspan=2><input type="submit" value="Einloggen"></td></tr>
          </table>
          </form>
          <br>
          <br>

          <a href="seite.php">Auf die nächste Seite gehen</a>
          </body>
          </html>

          und so die zweite Seite (seite.php):

          <?
           @session_start();

          ?>
          <html>
          <head>
          <title>Test mit Session-ID arbeiten</title>
          <?
          include ("/config.php");
          echo "<link rel=stylesheet type="text/css" href="$pfadhtml/styles/styles.css">";
          ?>
          </head>
          <body>
          <?

          $u = $_SESSION['username'];
           $p = $_SESSION['passwort'];

          echo "Benutzername: $u<br>";
           echo "Passwort: $p<br>";

          ?>

          <a href="start.php">Neuanmelden</a>
          </body>
          </html>

          und eben genau auf der zweiten Seite wird nichts angezeigt. Ich hätte erwartet, dass der Aufruf der zweiten Seite solange funktioniert, wie mein Browser geöffnet bleibt.

          1. </head>
            <body>
            <?

            $u = $_SESSION['username'];
            $p = $_SESSION['passwort'];

            Du musst die Variblen am Anfang so deklarieren:
            $username="blablabla";
            session_register('username');.

            1. Du musst die Variblen am Anfang so deklarieren:
              $username="blablabla";
              session_register('username');.

              Aber genau das geht doch nur wenn ich register_globals aktiviert habe.
              Das heisst im Umkehrfall ich kann session_register _nicht_ verwenden, es muss also doch auch noch eine andere Möglichkeit geben.

              1. Dann versuch doch nur mal diese Scripte, denn die funktionieren:

                Test.php
                <?php
                @session_start();
                $username="GGGGGG";
                $_SESSION['username'] = $username;
                ECHO "<a href='TEST1.php'>Seite 2</a>";

                ?>

                Test1.php
                <?php
                @session_start();
                echo  $_SESSION['username'];
                ?>

                Das ist ja Sinn und Zweck sich nur auf das Problem zu konsentrieren und nicht Seitenweise Code zu posten. Der Fehler kann ja auch ein nicht Session-Problem sein

              2. hallo Claudia, vielleicht meinst du ja folgends habe deine scripte wie folgt geändert. und so laufen sie auf alle fälle, ist von mir getestet worden.

                <datei: test.php>
                **********************
                <?
                 @session_start();
                ?>
                <html>
                <head>
                <title>Test mit Session-ID arbeiten</title>
                </head>
                <body>
                <br>
                <br>
                <form name="start" method=POST action="start.php">
                <table border=0>
                 <tr><td>Loginname: </td><td><input type="text" name="username"  value="<?echo $_SESSION['username']?>"size=20></td></tr>
                 <tr><td>Passwort: </td><td><input type="text" name="passwort" value="<?echo $_SESSION['passwort']?>" size=20></td></tr>
                 <tr><td colspan=2><input type="submit" value="Einloggen"></td></tr>
                </table>
                </form>
                <br>
                <br>

                <a href="start.php">Auf die nächste Seite gehen</a>
                </body>
                </html>
                ***************************

                <datei: start.php>
                ***************************
                <?
                @session_start();

                ?>
                <html>
                <head>
                <title>Test mit Session-ID arbeiten</title>
                </head>
                <body>
                <?
                if(!$_POST['username']) echo "Benutzername: ".$_SESSION['username']."<br>";
                else echo "Benutzername: ".$_POST['username']."<br>"; $_SESSION['username'] = $_POST['username'];
                if(!$_POST['passwort']) echo "Passwort: ".$_SESSION['passwort']."<br>";
                else echo "passwort: ".$_POST['passwort']."<br>"; $_SESSION['passwort'] = $_POST['passwort'];
                ?>
                <a href="test.php">Neuanmelden</a>
                </body>
                </html>
                *************************

                vielleicht hilft es dir ja weiter.

                gruß urmel

          2. $u = $_SESSION['username'];
            $p = $_SESSION['passwort'];

            Du musst die Variblen am Anfang so deklarieren:
            $username="blablabla";
            session_register('username');

          3. Hallo Claudia,

            $_SESSION['username'] = $username;
             $_SESSION['passwort'] = $passwort;

            bei dir ist register_globals auf off, richtig? dann stehen username und passwort in dem Array $_POST, also in $_POST['username'] und in $_POST['passwort']. (siehe http://de.php.net/language.variables.predefined)

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    2. des weitern frage ich mich was das @ vor session_start soll??
      ein einfaches session_start() reicht aus.

      Das Zeichen "@" unterdrückt alle Fehlermeldungen die mit dieser Funbktion passieren könnten: alle eine wichtiges Zeichen!!

      1. Das Zeichen "@" unterdrückt alle Fehlermeldungen die mit dieser Funbktion passieren könnten: alle eine wichtiges Zeichen!!

        Du hast natürlich recht, habe es sofort nach meinem post gemerkt, wollte dann eine korrektur schreiben, aber du warst schneller ;)
        und dies ist bestimmt keine ausrede, denn ich bin seit über 24 stunden wach , mal wieder *gg*