URL: https://www.overclockers.at/coding-stuff/probleme_mit_loginscript_in_php_125081/page_1 - zur Vollversion wechseln!
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:
dort muß irgendwie das Problem liegen.Code: PHPif ($_COOKIE["members"])
schau mal, ob dort überhaupt drinsteht, was du erwartest. alte php version? -> $HTTP_COOKIE_VARSCode: PHPvar_dump($_COOKIE)
Code: PHPif(isset($_COOKIE['var'] && !empty($_COOKIE['var'])) { prozedur }
vielleicht sind die cookies abgelaufen
edit: ohne source/lebendobjekt wirds wohl nicht gehn... ich mein eine _ganze_ zeile
Also in der Variable steht NULL, scheint also wirklich nix drinnen zu sein, also kein Cookie gesetzt
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: PHPmysql_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 (); } }
So Problem hat sich nach dem Hochladen auf nen anderen Webserver von selbst erledigt. Möglicherweise nur ein Problem mit der Serverconfig.
Siehe was diokletian gesagt hat: alte PHP-Version. Vor PHP 4.1 gab es kein $_COOKIES und dass wird das Problem gewesen sein.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025