session-variable will einfach nicht...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • session-variable will einfach nicht...

    Ich verstehe es nicht
    Bei folgendem Codeausschnitt wird immer bloß $level und $last ausgegeben... und $user bleibt immer leer... warum nur?
    PHP-Code:
    <?php
     
    if (session_is_registered("user") && session_is_registered("level")) $known 1;
     else {
      if (
    $_COOKIE["btvname"] && $_COOKIE["btvpass"]) {
       
    $n $_COOKIE["btvname"]; 
       
    $p $_COOKIE["btvpass"];
      } elseif (
    $_POST["pname"] && $_POST["ppass"]) {
       
    $n $_POST["pname"]; 
       
    $p $_POST["ppass"];
      }
      if (
    $n) {
       include (
    "protected/db_connect.inc.php");
       
    $res mysql_query("SELECT name,pass,level,last FROM user WHERE name = '$n'");
       if (
    mysql_num_rows($res) == 0) {
        
    $l_err "Dieser Benutzer existiert nicht.";
        
    $known 0;
        
    mysql_close($db);
       } else {
        
    $data mysql_fetch_array($res);
        if (
    $data["pass"] != $p) {
         
    $l_err "Das Passwort ist falsch.";
         
    $known 0;
        } else {
         
    $user $data["name"];
         
    $level $data["level"];
         
    $last $data["last"];
         
    setcookie("btvname",$data["name"],time()+3600*24*30);
         
    setcookie("btvpass",$data["pass"],time()+3600*24*30);
         
    session_start();
         
    session_register("user");
         
    session_register("level");
         
    session_register("last");
         
    mysql_query("UPDATE user SET last = ".time());
         
    $known 1;
        }
        
    mysql_close($db);
       }
      }
     }
     echo 
    $l_err;
     echo 
    $user;
     echo 
    $level;
     echo 
    $last;
    ?>
    ... später frage ich ab, ob $known true ist. Ist dies der Fall, werden die Sessionvariablen ausgegeben... sonst sowas wie "User unbekannt".
    Anhand des Cookies sollen User, die sich schon einmal eingelogged haben wiedererkannt werden. Beim anmelden werde Username und Passwort gePOSTed, daher oben die Abfrage...
    Die Cookies werden gesetzt und ausgelesen, das habe ich getestet. Auch der Abgleich mit der DB hat im Einzeltest funktioniert... ich denke, dass es an den Sessions liegt... ist auch mein erster Versuch damit.
    Bitte helft mir

    Gruß,
    pooky

    Ach ja, das ganze steht in der index.php, die bei jedem Seitenwechsel mit teilweise neuem Inhalt neu geladen wird.
    Zuletzt geändert von pooky; 09.09.2002, 23:33.

  • #2
    Hmm, liegt das vielleicht daran, dass das session_start() ganz zu Beginn stehen muss?
    Denn wenn die Session noch nicht gestartet hat kann man auch noch nicht pruefen ob die Variablen gesetzt sind, glaube ich zumindest.

    Ansonsten faellt mir dazu noch ein:

    - um die Globalen Arrays ($_COOKIE[], $_POST[]) zu nutzen brauchst du mindestens php 4.1
    - wenn Register_Globals auf OFF steht sollte man lieber nicht session_register() benutzen sondern $_SESSION["VAR"] = $VAR;


    mehr faellt mir dazu im moment leider nicht ein.

    Kommentar


    • #3
      Mit session_start() am Anfang klappt es... ich hatte es auch schonmal da, aber vielleicht gab es da noch nen anderen Fehler.
      Danke soweit

      Geht bei register_globals OFF wirklich session_register() nicht mehr?

      Kommentar


      • #4
        Original geschrieben von pooky
        Geht bei register_globals OFF wirklich session_register() nicht mehr?

        Soweit ich weiss nicht. Wenn du also schon php 4.1.x oder hoeher auf deinem Server hast dann wuerd ich schon $_SESSION["VARNAME"] benutzen, um Variablen fuer die Session zu speichern.

        Hier stehts nochmal genauer: http://www.php.net/manual/de/ref.session.php
        Zuletzt geändert von BlobBanana; 10.09.2002, 14:22.

        Kommentar


        • #5
          So, nochmal überarbeitet...
          PHP-Code:
          session_start();
           if (!
          $_SESSION["user"] && !$_SESSION["level"]) {
            if (
          $_COOKIE["btvname"] && $_COOKIE["btvpass"]) {
             
          $n $_COOKIE["btvname"]; 
             
          $p $_COOKIE["btvpass"];
            } elseif (
          $_GET["pname"] && $_GET["ppass"]) {
             
          $n $_GET["pname"]; 
             
          $p md5($_GET["ppass"]);
            }
            if (
          $n) {
             include (
          "protected/db_connect.inc.php");
             
          $res mysql_query("SELECT name,pass,level,last FROM user WHERE name = '$n'");
             if (
          mysql_num_rows($res) == 0) {
              
          $l_err "Dieser Benutzer existiert nicht.";
              
          $_SESSION["level"] = 0;
              
          mysql_close($db);
             } else {
              
          $data mysql_fetch_array($res);
              if (
          $data["pass"] != $p) {
               
          $l_err "Das Passwort ist falsch.";
               
          $_SESSION["level"] = 0;
              } else {
               
          $_SESSION["user"] = $data["name"];
               
          $_SESSION["level"] = $data["level"];
               
          $_SESSION["last"] = $data["last"];
               
          setcookie("btvname",$data["name"],time()+3600*24*30);
               
          setcookie("btvpass",$data["pass"],time()+3600*24*30);
               
          mysql_query("UPDATE user SET last = ".time());
              }
              
          mysql_close($db);
             }
            }
           }
          ?> 
          ... aber noch eine Frage: ich habe in der php.ini eingestellt, dass die Session-ID automatisch über die URL übermittelt wird. Öffne ich die Startseite, sind auch alle Links brav mit ?sid=56s68s90d9008ss97s79s versehen... sobald ich jedoch einen Menüpunkt klicke, ist dies nicht mehr der Fall. Dennoch kann ich weiter auf die Sessionvariablen zugreifen... liegt aber wohl daran, dass automatisch noch ein Keks gesetzt wird... doch was, wenn der Client diesen nicht annimmt?!

          Kommentar


          • #6
            Original geschrieben von pooky

            ... aber noch eine Frage: ich habe in der php.ini eingestellt, dass die Session-ID automatisch über die URL übermittelt wird. Öffne ich die Startseite, sind auch alle Links brav mit ?sid=56s68s90d9008ss97s79s versehen... sobald ich jedoch einen Menüpunkt klicke, ist dies nicht mehr der Fall. Dennoch kann ich weiter auf die Sessionvariablen zugreifen... liegt aber wohl daran, dass automatisch noch ein Keks gesetzt wird... doch was, wenn der Client diesen nicht annimmt?!
            Wenn die Session keinen Cookie erzeugen kann, benutzt sie normalerweise automatisch die URL zum uebergeben der SID. Das kann man auch irgendwie abschalten, aber keine Ahnung wie.

            Kommentar

            Lädt...
            X