andreas: Wert in Session aktualisieren

Hallo nochmal.
Also jetzt merke ich langsam, das mein Problem nicht das Passwort selbst ist, sondern die Session. Das Formular in meinem Thread unten ist dazu gedacht, im internen Bereich seine Zugangsdaten(username,password) zu ändern.
Zunächst allgemein: Wenn man sich einloggt muß man in ein Login-Form username und passwort eingeben, diese werden überprüft und wenn OK in eine Session eingetragen. Jetzt mache ich das so, dass ich auf jeder internen Seite die Session starte, und eine neue DB Abfrage mache ob die in der Session gespeicherten Daten gültig sind.
Fand ich anfangs am sichersten, jetzt bringt mich das aber um den Verstand, wo ich diese Daten in der Session ändern will.
Also wie überall werden auch in dem Änderungsforumlar die ´gespeicherten Daten aus der Session per Abfrage überprüft. Dann kann man halt ein neues Passwort wählen, das wird auch gut in die DB eingeragen, aber ich bekomme es zum verrecken nicht in die Session.
Erst habe ich probiert mit session_register("pass"), dieses zu überschreiben, passierte aber nichts, dann habe ich vorher Session_destroy() gemacht, hlf auch nichts, und dann noch session_unregister("pass"), was auch nicht geht. Dazu muss ich sagen, dass ich das alles in einer Datei direkt untereinander schreibe, also:

session_unregister("pass");
session_register("pass");

in $pass steht schon das richtige, wird ja in DB eingetragen, aber so funktioniert das nicht.
Ich weiß nicht aber irgendwie treiben mich Sessions langsam in den Wahnsinn!
Wo mache ich bloß den Fehler? Ich bin an diesem blöden Script jetzt bestimmt 4 Stunden, ohne Sessions wären das 10 Minuten gewesen!

Ich hoffe Ihr wißt Rat!

Grüsse
  Andreas

  1. Hallo nochmal.

    kann das manchmal richtiger sein?:

    session_unregister("$old_pass");
    session_register("$new_pass");

    habe mit sessions noch nicht gearbeitet, aber so aus der allgemeinen Logik heraus halte ich das so für richtiger.

    Gruß
    Andreas

    1. Hi!

      kann das manchmal richtiger sein?:

      session_unregister("$old_pass");
      session_register("$new_pass");

      habe mit sessions noch nicht gearbeitet, aber so aus der allgemeinen Logik heraus halte ich das so für richtiger.

      Also das erste was ich über Session Register gelernt habe, war dass die Variablen OHNE $ eingetragen werden.
      2. Brauche ich ja die Variable "$pass", da ich die auf jeder Seite abfrage und überprüfe. In der Variable steht auch immer der richtige Wert, wird ja schließelich in DB eingetragen, nur das mit den Sessions will nicht klappen. Ìch kann ja mal das ganze Script posten, dann versteht ihr das vieleicht etwas besser:

      <?
      @session_start();

      include "verb.php";

      Prüfung ob Zugangsdaten aus Session korrekt:

      if (!isset($UID) OR !isset($user) OR !isset($pass)){
      header ("Location: login.php");
      exit;
      }
      else{
      $query = "SELECT pass FROM kunden WHERE ID = '$UID'";
      $res = mysql_query($query, $link);
      $benutzer=mysql_fetch_array($res);
      $hash = MD5($pass.$user);
      if($benutzer[pass] != $hash) {
      header ("Location: login.php");
      exit;
      }
      }

      Wenn Formular abgeschickt

      if ($typ == "update"){
      if ($new_pass!=""){
      $password = $new_pass;}
      else {
      $password = $old_pass;}
      $user = $new_user;

      $hash = MD5($password.$user);

      $update = "UPDATE kunden SET user='$user',pass='$hash' WHERE ID='$UID'";
      $res = mysql_query($update, $link);

      session_unregister("pass");
      $pass=$password;
      session_register("UID","user","pass");}
      }

      ?>

      <form name="form1" method="post" action="<? echo"$PHP_SELF"?>">

      &Auml;ndern Sie Ihre Zugangsdaten<br>

      Benutzername <input type="text" name="new_user" value="<? echo "$user" ?>"><br>

      altes Passwort <input type="password" name="old_pass"><br>

      neues Passwort <input type="password" name="new_pass"><br>

      neues Passwort wiederholen: <input type="password" name="new_pass2"><br>

      <input type=image src="images/go.gif" name="image" border="0">

      <input type="hidden" name="typ" value="update">

      </form>

      Und jetzt nochmal das genau Problem, solange ich nur Benutzernamen ändere ist alles OK(auch ohne session_unregister), aber sobald ich das Passwort ändere werde ich rausgeschmissen(durch meine eigene Prüfung, und zwar ab hash in DB = hash in Session.

      WAS SOLL ICH MACHEN???

      PS: Ich habe ein paar Prüfroutinen weggelassen,damit es übersichtlicher wird, aber die haben keinen Einfluß auf das Problem gehabt!

      Grüsse
        Andreas

      1. Hi, andreas!

        Ich habe keine Ahnung, aber ich denke mal, daß irgendwas schief geht, worauf man beim Betrachten des Codes nicht kommt. Schau einfach, daß Du überall ein paar Echo's reinpflanzt, so mach ich's dann immer, also etwa so die Art:

        echo "variable=$variable<br>";

        und mach das mit allen notwendigen Variablen an allen Stellen, die Dir notwendig erscheinen. Oft finde ich nur so den Fehler, denn plötzlich ist da ein Array scheinbar leer, obwohl man es doch mit Inhalten gefüllt hat oder so. Wenn Du weißt, an Stelle X fliegt er raus, dann setz am besten davor so ein echo und bei If-Anweisungen im IF-Zweig und im ELSE-Zweig bzw. dahinter auch. Wenn er also nach dem Hash rausfliegt, dann mach einfach:
        echo "hash=$hash<br>benutzer[pass]=$benutzer[pass]";

        Wahrscheinlich sind aus irgendeinem Grund die Werte nicht gleich, denn daß die If-Abfrage spinnt ist eher unwahrscheinlich. Dann mußt Du eben weiterschauen: Warum ist es nicht gleich? steht überhaupt in beiden was drin --> wieder ein echo einschieben und immer wieder im Browser gucken, was in den Variablen drinsteht. Das kann manchmal richtig lange dauern, aber es ist der einzige Weg, um den Fehler zu finden.

        Wenn Du dabei versuchst, systematisch vorzugehen, findest Du den Fehler auch. Also von der Stelle an, bei der ein Feher auftritt quasi immer weiter rückwärts gehen.

        Weiter kann ich Dir erstmal nicht helfen.

        Grüsse
          Andreas

        1. Hi!
          ich hab alles auskommentiert und Stück für Stück wieder hinzugefügt, mit deinen echos, hab ein paar Sachen verändert, weiß gar nicht genau wo der Fehler lag, jedenfalls geht es jetzt :-)
          Danke Ecuh allen für die Hilfe, jetzt komme ich allgemein mit Sessions besser klar!

          Grüsse
            Andreas

  2. Ich weiß nicht aber irgendwie treiben mich Sessions langsam in den Wahnsinn!

    Das will ich verhindern ;-)

    pit

    <?php
    session_start();
    print session_encode();
    ?>
    <html>
    <head>
      <title>
    http://localhost:8080/Ich_lerne_PHP/20_Sitzungen/05_Sitzungsvariable_aktualisieren.php
      </title>
    </head>
    <body>
    <?php
        session_register( $password );
        print "<p>Ihr Passwort lautet: $password</p>";
    ?>
    <form method="POST">
    <input name=password>
    <input type="submit" value="submit">
    </form>
    </p>
    <a href="05_Sitzungsvariable_aktualisieren2.php">go</a>
    </body>
    </html>

    1. Hi!

      Was ist das???

      <?php
      session_start();
      print session_encode();

      Warum das?

      ?>
      <html>
      <head>
        <title>
      http://localhost:8080/Ich_lerne_PHP/20_Sitzungen/05_Sitzungsvariable_aktualisieren.php
        </title>
      </head>
      <body>
      <?php
          session_register( $password );

      Ich dachte man muß session_register( "password" ); schreiben?!

      print "<p>Ihr Passwort lautet: $password</p>";

      Das hat ja mit der Session nichts zu tun, zumindest wenn Du das Formular abschickst hast Du das Passwort so oder so in der Variable!

      ?>
      <form method="POST">

      warum keine Action?

      <input name=password>
      <input type="submit" value="submit">
      </form>
      </p>
      <a href="05_Sitzungsvariable_aktualisieren2.php">go</a>

      Und wo geht das hin?

      </body>
      </html>

      Ich habe da ein ganz grundsätzliches Problem, auch schonmal vorher gehabt. Eigentlich drei.

      Erstes: Wann wird Session_register oder Session_start ausgeführt? Doch erst ganz am Ende einer Seite, oder? Also kann ich nicht sowas machen wie direkt hintereinander register und unregister, oder? Kann ich das überhaupt auf einer Seite machen, oder brauche ich dafür ein Extra Script?

      zweitens: Kann Session_register eine Variable überschreiben? Wenn nein wie bekomme ich am einfachsten einen anderen Wert in eine Sessionvariable, mit einem Scrip wenn möglich?

      drittens: Wie ist das mit der Sicherheit, ist mein Ansatz richtig das ich UserID, Pass und Usermname in der Session speichere und immer Username und Password überprüfe, ist das überhaupt sinnvoll oder reicht da nicht einfach die UserID, denn dann hätte ich dieses Problem nicht!

      Grüsse
        Andreas

      1. Hallo Andreas:

        <?php
        session_start();
        print session_encode();
        Warum das?

        Sonst klappt das Überschreiben nicht, eigentlich müsste Dein Script mit session_encode(); funktionieren.

        ?>
        <html>
        <head>
          <title>
        http://localhost:8080/Ich_lerne_PHP/20_Sitzungen/05_Sitzungsvariable_aktualisieren.php
          </title>
        </head>
        <body>
        <?php
            session_register( $password );
        Ich dachte man muß session_register( "password" ); schreiben?!

        Kannst beides schreiben.

        print "<p>Ihr Passwort lautet: $password</p>";
        Das hat ja mit der Session nichts zu tun, zumindest wenn Du das Formular abschickst hast Du das Passwort so oder so in der Variable!

        ?>
        <form method="POST">
        warum keine Action?

        Script ruft sich selber auf.

        <input name=password>
        <input type="submit" value="submit">
        </form>
        </p>
        <a href="05_Sitzungsvariable_aktualisieren2.php">go</a>
        Und wo geht das hin?

        </body>
        </html>

        Gruss Pit

        1. Moin

          session_register( $password );
          Ich dachte man muß session_register( "password" ); schreiben?!

          Kannst beides schreiben.

          Ich schlage vor du konsultierst die Dokumentation bevor du so einen Blödsinn schreibst. Session_register nimmt die _Namen_ der Variablen die es registrieren soll oder Arrays mit Namen, nicht aber die Variablen_werte_ selbst. Deine Zeile funktioniert also nur wenn $password zufälligerweise den Wert "password" hat.

          An Andreas: Ich sehe dein Problem nicht. Normalerweise rufst du einmal irgendwo session_register("pass"); auf und brauchst dann nichts weiter tun. Am Ende des Skriptes wird der _aktuelle_ Wert von $pass dann automatisch in der Session gespeichert. Explizites Überschreiben ist nicht nötig.

          --
          Henryk Plötz
          Grüße aus Berlin

          1. Sehr geehrter Herr Henryk Plötz,

            Deine Zeile funktioniert also nur wenn $password zufälligerweise den Wert "password" hat.

            Bei mit funktioniert es mit den Werten Peter, Henryk etc.

            bevor du so einen Blödsinn schreibst.

            ich versuche den Leuten nach besten Wissen und Gewissen zu helfen, also bitte ein bisschen höflicher. Vielen Dank.

            Gruss Peter

            1. Moin

              Bei mit funktioniert es mit den Werten Peter, Henryk etc.

              Hmm, du hast an deinem PHP-Interpreterquellcode nicht zufällig einige Veränderungen vorgenommen?

              <?php
               session_start();
               session_register("ha");
               echo ++$ha;
              ?>

              Funktioniert, also nach jedem neu laden steht eine um 1 größere Zahl da.

              <?php
               session_start();
               session_register($ho);
               echo ++$ho;
              ?>

              Funktioniert nicht, es steht immer 1 da.

              <?php
               session_start();
               $ho = "ha";
               session_register($ho);
               echo ++$ha;
              ?>

              Funktioniert wieder.

              ich versuche den Leuten nach besten Wissen und Gewissen zu helfen, also bitte ein bisschen höflicher. Vielen Dank.

              Entschuldigung

              --
              Henryk Plötz
              Grüße aus Berlin

  3. Hallo,

    Ich weiß nicht aber irgendwie treiben mich Sessions langsam in den Wahnsinn!
    Wo mache ich bloß den Fehler? Ich bin an diesem blöden Script jetzt bestimmt 4 Stunden, ohne Sessions wären das 10 Minuten gewesen!

    Versuche mal mein Seminarbeispiel nachzuvollziehen (3 Dateien):

    // sessions1.php

    <?php
    session_start();         // Sitzung starten
    session_register("xyz"); // Sitzungs-Variable xyz registrieren
    ?>
    <html>
    <head>
    <title>Sessions</title>
    </head>
    <body>
    <h2>Testseite 1</h2>
    <?php
    print "Session-ID: ".session_id();
    $xyz="Test"; // Sitzungs-Variable mit Wert belegen
    ?>
    <br>
    <a href="sessions2.php">Testseite 2</a>
    </body>
    </html>

    // sessions2.php

    <?php
    session_start();
    ?>
    <html>
    <head>
    <title>Sessions</title>
    </head>
    <body>
    <h2>Testseite 2</h2>
    <?php
    print "Session-ID: ".session_id();
    print "<br>Wert der Session-Variable xyz: ".$xyz;
    ?>
    <br>
    <a href="sessions3.php">Testseite 3</a>
    </body>
    </html>

    // sessions3.php

    <?php
    session_start();
    session_unset();   // alle Sitzungs-Variablen entfernen
    session_destroy(); // Sitzung beenden
    ?>
    <html>
    <head>
    <title>Sessions</title>
    </head>
    <body>
    <h2>Testseite 3</h2>
    <?php
    print "Sitzungs-ID: ".session_id();
    print "<br>Sitzungs-Variable $xyz: ".$xyz;
    ?>
    <br>
    Die Session-ID und die Sitzungsvariable $xyz wurde wieder entfernt.
    </body>
    </html>

    MfG, Thomas

    1. Hi!

      Danke schön für die Scripte. Hab mit denen mal ein wenig herumprobiert, und bin zu fogender Erkenntniss gelangt:
      Man kann mit session_register einfach Sessionvariablen überschreiben.

      Aber beim eigentlichen Problem komme ich immer noch nicht weiter.
      Ich schildere nochmal kurz den Ablauf:

      Das Script "script.php" wird geöffnet, darin auch die Session gestartet. Als erstes wird überprüft, ob die Werte der Session-Variable "Test" mit dem entsprechenden Eintrag in der Datenbank übereinstimmen.
      Im html-Teil der Seite kann man dann die Variable "Test" in ein html-Formular eingeben, dieses Formualar wird dann an sich selbst geschickt. Also wieder session gestartet(noch mit altem Wert für Variable),verglichen, dann die Variable "Test" in der Datenbank aktualisiert und direkt danach Session_register("Test").
      Dann wird per header wieder auf dieselbe Seite umgeleitet, und da stimmin die Variablen in DB und Session nicht mehr überein und es ist Ende.
      Das vereinfachte Script steht hier: http://forum.de.selfhtml.org/?m=25973&t=4617

      Theoretisch müßte doch beim nächsten Aufruf der Seite die Sessionvariable aktualisiert sein und mit dem Eintrag in der DB übereinstimmen, tut sie aber nicht.

      Grüsse
        Andreas