Kaputte Sessionfunktionen

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

  • Kaputte Sessionfunktionen

    PHP-Code:
        function logged() {
        
            if(!
    session_is_registered(userid)) {
                return 
    false;
            }

            return 
    true;
        }

        function 
    login($username ""$password "") {
            global 
    $conn;

            if(empty(
    $username) || empty($password)) {
                return 
    false;
            }

            
    $password md5($password);

            
    $select "SELECT userid FROM user WHERE username = '".addslashes($username)."' AND password = '".addslashes($password)."' LIMIT 1";
            
    $result = @mysql_query($select);

            if(!@
    mysql_num_rows($result)) {
                return 
    false;
            }

            while(
    $row mysql_fetch_array($result)) {
                
    $userid $row["userid"];
            }

            
    $_SESSION["userid"] = $userid;
            return 
    true;
        }

        function 
    logout() {
            
    session_unregister(userid);
        } 
    Warum werde ich mit diesen Funktionen immer als ausgelogged dargestellt? Ich habe kein (!) session_start() vergessen.

  • #2
    Wenn du $_SESSION['bla'] = 'foo' benutzt, kannst du dies nicht mit session_is_registered('bla') abfragen, dies ist nicht äquivalent. Aber verwende doch einfach überall das $_SESSION - Array, da die Funktionen session_register, session_is_registered etc veraltet sind.
    Zuletzt geändert von blackhole; 25.08.2003, 16:59.

    Kommentar


    • #3
      Außerhalb der Funktion login() ist auch das Array $_SESSION leer.

      Kommentar


      • #4
        $_SESSION ist superglobal und überall gültig (siehe vielleicht auch hier: http://de2.php.net/manual/de/languag...predefined.php), es kann nur daran liegen, dass die Zuweisung innerhalb der Funktion dann nicht klappt.

        Kommentar


        • #5
          Hm, innerhalb der Funktion sagt ein print_r() aber "Array ( [userid] => 1 )". Außerhalb sagt es nichts.

          Kommentar


          • #6
            Mittlerweile sieht es so aus:
            PHP-Code:
            class user {
                function 
            logged() {
                    global 
            $_SESSIONS;

                    if(!isset(
            $_SESSIONS["userid"])) {
                        return 
            false;
                    }

                    return 
            true;
                }

                function 
            login($username ""$password "") {
                    global 
            $_SESSIONS$conn;

                    if(empty(
            $username) || empty($password)) {
                        return 
            false;
                    }

                    
            $password md5($password);

                    
            $select "SELECT userid FROM user WHERE username = '".addslashes($username)."' AND password = '".addslashes($password)."' LIMIT 1";
                    
            $result = @mysql_query($select);

                    if(!@
            mysql_num_rows($result)) {
                        return 
            false;
                    }

                    while(
            $row mysql_fetch_array($result)) {
                        
            $userid $row["userid"];
                    }

                    
            $_SESSIONS["userid"] = $userid;
                    return 
            true;
                }

                function 
            logout() {
                    global 
            $_SESSIONS;
                
                    unset(
            $_SESSIONS["userid"]);
                }

            Brauch ich evtl. doch noch ein session_start() innerhalb der Klasse? Habe es nur vor dem ersten Aufrufen der Klasse. Wenn ich nun innerhalb von einem aufruf meiner Seite
            PHP-Code:
            $mz->login("username""password");
            if(
            $mz->logged()) {
                echo 
            "drin";
            }
            else {
                echo 
            "draussen";

            mache, sagt er mir "drin". Rufe ich danach jedoch das selbe Script mit auskommentierter login() - Funktion auf, sagt er draußen. Obwohl eine Sessiondatei in /tmp erzeugt wird. Diese ist leer - ist das normal?

            Kommentar


            • #7
              Du hast überall $_SESSIONS stehen, das Array heißt aber $_SESSION, änder das mal, dann sollte es funktionieren.
              PHP-Code:
              global $_SESSION 
              brauchst du dann auch nicht, $_SESSION ist, wie schon gesagt, superglobal und in allen Geltungsbereichen verfügbar.


              Ansonsten noch etwas:
              PHP-Code:
              while($row mysql_fetch_array($result)) {
                  
              $userid $row["userid"];

              braucht du nicht, da du ja definitiv nur eine Zeile aus der Datenbank erhälst.

              Kommentar

              Lädt...
              X