"We are back" « oc.at

Probleme mit Loginscript in PHP

jb 20.09.2004 - 18:58 631 5
Posts

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3523
Hab mir vor längerer Zeit mal ein Script geschrieben, das mir den Login zu einem geschützen Members-Bereich einer Seite macht. Dabei werden Username und Paßwort (das natürlich verschlüsselt) im Cookie gespeichert.
Das Cookie wird im Members-Bereich immer abgefragt, bevor irgendeine Funktion ausgeführt wird, wenn es nicht mehr existiert, dann fliegt der User sofort raus.

Leider funktioniert mein schönes Script auf einmal nicht mehr, das Cookie wird zwar noch erstellt, nur im PHP-Script verzweigt das Programm bei gesetztem Cookie nun in den falschen Teil der Prozedur.

Kann mir das eigentlich nur mit dem Wechsel des Servers erklären, am Script hab ich nämlich schon länger nix geändert.

Die betreffende Codezeile ist:
Code: PHP
 if ($_COOKIE["members"]) 
dort muß irgendwie das Problem liegen.

Wie kann ich sonst abfragen, ob das Cookie existiert? Was hab ich vielleicht falsch gemacht?

dio

Here to stay
Registered: Nov 2002
Location: Graz
Posts: 4971
Code: PHP
var_dump($_COOKIE)
schau mal, ob dort überhaupt drinsteht, was du erwartest. alte php version? -> $HTTP_COOKIE_VARS

edit:

Code: PHP
if(isset($_COOKIE['var'] && !empty($_COOKIE['var']))
{
prozedur
}

btw. mit so einem code schnipsel (und das is noch hochgegriffen) fängt man nix an.
Bearbeitet von dio am 20.09.2004, 19:06

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
vielleicht sind die cookies abgelaufen :D

edit: ohne source/lebendobjekt wirds wohl nicht gehn... ich mein eine _ganze_ zeile :eek:

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3523
Also in der Variable steht NULL, scheint also wirklich nix drinnen zu sein, also kein Cookie gesetzt :confused:


Hier mal der Teil des Scripts, der für die Cookie-Verwaltung zuständig is. Is jede Menge, mein Programmierstil (falls man das so nennen darf) is ja nicht der beste...

Code: PHP
mysql_select_db ($dbname, $db);
  if ($_COOKIE["kj_member"])                      # Prüfen ob Cookie gesetzt ist
  { echo "eingeloggt";
    if ($action=="logout")                        # Wenn ausgeloggt werden soll
    { echo "ausloggen";
      setcookie("kj_member");                     # Löschen des Cookies
      session_unregister ("username");
      session_unregister ("passwort");
      session_unregister ("berechtigung");
      head ("1");
      echo "<body>\n<br>\n<br>\n<br>\n<center>Wenn du diesen Text siehst, dann <a href=\"members.php\">klick bitte hier</a> um dich auszuloggen</center><br>\n";
      bottom ();
    }
    else
    { echo "eingeloggt Berechtigung prüfen";
      $un_pw=$_COOKIE["kj_member"];               # User ist eingeloggt, Username aus Cookie lesen und Berechtigungsstufe setzen
      $username_cookie = strtok ($un_pw, ";;;;;");# Username aus Cookie auslesen
      $passwort_cookie = strtok (";;;;;");        # Paßwort aus Cookie auslesen
      $berechtigung_cookie = strtok (";;;;;");    # Berechtigung aus Cookie auslesen
      $check_userdaten = mysql_query("select * from $table_user where username='$username_cookie'> ''", $db);
      $passwort_db=mysql_result ($check_userdaten,0,"md5");
      $username_db=mysql_result ($check_userdaten,0,"username");        # Usernamen aus DB auslesen
      $berechtigung=mysql_result ($check_userdaten,0,"berechtigung");   # Berechtigungsstufe aus DB auslesen
      $user_id=mysql_result ($check_userdaten,0,"id");        # Berechtigungsstufe aus DB auslesen
      $berechtigung_db=md5($berechtigung);       # Berechtigungsstufe verschlüsseln
      $vorname_db=mysql_result ($check_userdaten,0,"Vorname");
      $nachname_db=mysql_result ($check_userdaten,0,"Nachname");
      $gebtag_db=mysql_result ($check_userdaten,0,"Geburtstag");
      $voller_name="$vorname_db $nachname_db";
if ($username_db==$username_cookie && $passwort_db==$passwort_cookie) 
{ echo "context";
        # Context anzeigen
        if ($action=="update") head ("*");
        elseif ($action=="insert")
        { if ($bereich=="members_edit")
          { # checken ob bereits ein Eintrag für diesen User vorhanden ist,wenn ja editieren lassen
            $nachname=$GLOBALS["nachname"];
            $vorname=$GLOBALS["vorname"];
            $gebtag=$GLOBALS["gebtag"];
            $userdaten = mysql_query ("select * from $table_user where Nachname='$nachname' and Vorname='$vorname' a
nd Geburtstag='$gebtag'", $db);
            $vorhanden = mysql_NumRows ($userdaten);
            if ($vorhanden=="0")
            { head ("*");
              $vorhanden="0";
            }
            else
            { head ("0");
              $vorhanden="1";
            }
          }
          else head ("*");
        }
        elseif ($action=="edit") head ("*");
        else head ("0");          # Kopfzeile ohne neu zu laden
        logout_maske ($voller_name);
        kj_stat ($username_db, $table_user, $table_log, $db);
        context ($voller_name, $db, $table_news, $berechtigung, $bereich, $user_id, $table_user, $action, $vorhanden
, $passwd_ungleich);
      }

else     # User/PW oder Cookie ungültig, Seite neu laden
      { head ("logout");
        echo "<body>\n<br>\n<br>\n<br>\n<center>Wenn sie diesen Text sehen, dann <a href=\"members.php\">klicken sie bitte hier</a></center><br>\n";
        bottom ();
      }
    }
  }
  else                         # Cookie nicht gesetzt
  { if ($username_insert!="" && $passwort_insert!="")
    {                           # User name und Paßwort eing
egeben, Userdaten aus der DB lesen
      $check_userdaten = mysql_query("select * from $table_user where username='$username_insert'> ''", $db);
      $anzahl_userdaten=mysql_NumRows ($check_userdaten);
      if ($anzahl_userdaten=="1")                                                       # Checken ob dieser Username verfügbar ist.
      { $passwort_db=mysql_result ($check_userdaten,0,"md5");
        $username_db=mysql_result ($check_userdaten,0,"username");
        $passwort_insert=md5 ($passwort_insert);  # Paßwort verschlüsseln
        if ($username_db==$username_insert && $passwort_db==$passwort_insert)
        {  # Username und Paßwort korrekt, Berechtigungsstefe auslesen
          $berechtigung_db=md5(mysql_result ($check_userdaten,0,"berechtigung"));
          $inhalt_cookie="$username_db;;;;;$passwort_db;;;;;$berechtigung_db";          # Username und PW in Cookie speichern
          setcookie("kj_member", $inhalt_cookie, time()+60*60*24*7);                    # Cookie für 1 Woche setzen
          session_register ("username");
          session_register ("passwort");
          session_register ("berechtigung");
          head ("1");                             # Seite neu laden
          echo "Einloggprozess1";
          bottom ();
        }
        else
        { head ("1");                             # Seite neu laden
          echo "Cookie nicht gesetzt!";
          bottom ();
        }
      }
else       # Username nicht in der Db gefunden, erneut einloggen versuchen
      { head ("0");
        login_maske ();
        echo "Username nicht in DB gefunden";
        bottom ();
      }
    }
    else         # Username und Paßwort nicht eingegeben
    { head ("0");
      login_maske ();
      echo "Username/PW fehlen";
      bottom ();
    }
  }

Wie gesagt, bisher hats funktioniert.
Anmerkung: es sind an ein paar Stellen Echos drinnen, die zum Testen dienen.
Bearbeitet von jb am 20.09.2004, 21:39

jb

Here to stay
Registered: May 2000
Location: /home/noe/
Posts: 3523
So Problem hat sich nach dem Hochladen auf nen anderen Webserver von selbst erledigt. Möglicherweise nur ein Problem mit der Serverconfig. :bash:

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4513
Siehe was diokletian gesagt hat: alte PHP-Version. Vor PHP 4.1 gab es kein $_COOKIES und dass wird das Problem gewesen sein.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz