Kaputte Sessionfunktionen

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

  • blackhole
    antwortet
    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.

    Einen Kommentar schreiben:


  • Doerr
    antwortet
    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?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • blackhole
    antwortet
    $_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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • blackhole
    antwortet
    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, 17:59.

    Einen Kommentar schreiben:


  • Doerr
    hat ein Thema erstellt Kaputte Sessionfunktionen.

    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.
Lädt...
X