• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Login funktioniert nur manchmal..

tim-peters

Neues Mitglied
Hey,
auf der Webseite die ich verwalte, habe ich jetzt einen einfachen Login geschaffen. Allerdings kommen vereinzelte Beschwerden, dass Mitglieder mit richtigem Passwort und Benutzernamen trotzdem nicht reinkommen. Also habe ich einen Logfile eingerichtet der alle Fehlversuche in eine Datei schreibt. Tatsächlich tauchen Login-Versuche auf, bei denen alles Stimmt und der Benutzer trotzdem auf die "falsches-Passwort-Seite" weitergeleitet wird.
Wie kann das sein? Warum funktioniert dieses PHP-Script manchmal und manchmal nicht?

Bin gespannt auf eure Ideen..


Hier mein PHP-Loginscript:
PHP:
<?php

$Gueltigkeit = time()+(60*60*3);

    switch ($_POST["name"] )

{

case strtolower($_POST["name"]) == strtolower("MaxMustermann") && $_POST["kennwort"] == "wasweisichdenn1234";
setcookie("loginBLA", "blabla", $Gueltigkeit, "/", ".dieSeite.de");
include ("login.html");
break;

// (...)

    
    default:
    
    // an dieser Stelle würde ein Fehlversuch eingetragen werden

    header ("Location: http://www.dieSeite.de/?login=failed");
    
    }
    
    
?>
lg Tim-
 
Also so im großen und ganzen ist das Script kacke! Wozu ein Switch wenn es sowieso nur 2 Möglichkeiten gibt? ;) Dafür benutzt man
PHP:
if (bedingung) {
  //korrekt
} else {
  //inkorrekt
}
Switch bietet sich nur bei 2+x Bedingungen (`default` mitgezählt) an, wobei x > 0 ist.

sprich:
PHP:
if (isset($_POST["name"], $_POST["kennwort"]) && strtolower($_POST["name"]) == strtolower("MaxMustermann") && $_POST["kennwort"] == "wasweisichdenn1234") {
  //keks setzen und am besten danach auch weiterleiten (nicht include)
} else {
  header ("Location: http://www.dieSeite.de/?login=failed");
  exit;
}
reicht da eigentlich!

Wobei ich hoffen will, dass das Passwort verschlüsselt aus einer Datenbank gelesen wird, genauso wie der Username ;)

Wenn das so nicht funktioniert, wäre möglicherweise dein Logfile hilfreich.
 
Zuletzt bearbeitet:
OK, hab das ganze jetzt in eine If/elseif/else-Struktur umgeschrieben. Bei mir funktioniert auch alles, aber weiterhin tauchen im Logfile Zeilen auf, dass jemand trotz richtigem Benutzernamen und Passwort nicht eingeloggt wurde.
Auch für das alte Script: Wie kann es sein, dass es meistens funktioniert hat und nur manchmal nicht? Müsste es nicht logischer Weise immer funktionieren oder eben immer nicht?

Hier mein neues, noch einfacheres Login-"Script":
PHP:
<?php 
echo "Bitte warten..."; 

// Variablen 
$Gueltigkeit = time()+(60*60*3); 
$name = strtolower($_REQUEST["name"]); 
$pass = strtolower($_REQUEST["kennwort"]); 

// Daten 
if ($name == strtolower("MaxMustermann") and $pass == strtolower("wert1234")) 
{ 
    setcookie("username", "Max", $Gueltigkeit, "/", ".dieSeite.de"); 
    $login = "true"; 
} 

elseif ($name == strtolower("PetraMustermann") and $pass == strtolower("ertz2345")) 
{ 
    setcookie("username", "Petra", $Gueltigkeit, "/", ".dieSeite.de"); 
    $login = "true"; 
} 

// (...)
// Bei Falschen Daten 
else 
{     
    $logfile = "./logfiles/logins.dat"; 
    $fp = fopen($logfile, "a"); 
    $logline = date("l d.M.Y - G.i")." Uhr ; Fehlversuch: ".$_SERVER['REMOTE_ADDR']."|".$_REQUEST["name"]." - ".$_REQUEST["kennwort"]."\n"; 
    fwrite($fp, $logline); 
    fclose($fp); 
    header ("Location: http://www.dieSeite.de/?message=1"); 
     
} 


// Bei richtigen Daten 
if ($login == "true")  
{ 
    $logfile = "./logfiles/logins.dat"; 
    $fp = fopen($logfile, "a"); 
    $logline = date("l d.M.Y - G.i")." Uhr ; login: ".$_SERVER['REMOTE_ADDR']."|".$_REQUEST['name']."\n"; 
    fwrite($fp, $logline); 
    fclose($fp); 
    setcookie("login", "bla0099000", $Gueltigkeit, "/", ".dieSeite.de"); 
    header ("Location: http://www.dieSeite.de/?message=3"); 
} 
     
?>
Und Hier Auszüge aus "logins.dat":
Code:
(...)

Monday 04.May.2009 - 13.13 Uhr ; Fehlversuch: 85.180.185.66|ertz2345 - PetraMustermann
Monday 04.May.2009 - 13.14 Uhr ; Fehlversuch: 85.180.185.66|ertz2345 - petramustermann
Monday 04.May.2009 - 14.17 Uhr ; login: 79.220.65.52|MaxMustermann
Monday 04.May.2009 - 14.28 Uhr ; Fehlversuch: 85.180.185.66|ertz2345 - PetraMustermann

(...)
lg Tim-
 
Ich bin mir nicht sicher ob ich das Log-File richtig lese, es sagt aber doch nur aus, das Benutzername oder Passwort nicht gestimmt haben. Somit würde eine Eingabe mit falschem Passwort auch einen Eintrag ins Log-File geben.

Könnten die Einträge nicht daher stammen?
 
Ich bin mir nicht sicher ob ich das Log-File richtig lese, es sagt aber doch nur aus, das Benutzername oder Passwort nicht gestimmt haben. Somit würde eine Eingabe mit falschem Passwort auch einen Eintrag ins Log-File geben.

Das ist richtig. Schaut man sich die Zeilen aber genau an, so fällt auf, dass Benutzername und Passwort RICHTIG sind. Trotzdem steht davor Fehlversuch - also hat gemand alles richtig eingegeben und ihm wurde trotzdem gesagt irgenwas wäre falsch.
Genau da liegt mein Problem. Manchmal kommt trotz richtiger Eingabe die "irgendwas stimmt nicht"-Seite - aber nur manchmal.
 
So schreibst du das doch in das Log-File:

PHP:
$logline = date("l d.M.Y - G.i")." Uhr ; Fehlversuch: ".$_SERVER['REMOTE_ADDR']."|".$_REQUEST["name"]." - ".$_REQUEST["kennwort"]."\n";
Das kommt raus:

Code:
Monday 04.May.2009 - 13.13 Uhr ; Fehlversuch: 85.180.185.66|ertz2345 - PetraMustermann

PetraMustermann ist also das Passwort?
 
Ich hab garnicht mehr auf die Reihenfolge geachtet..Sehr wahrscheinlich hat sich einfach jmd. damit geirrt.
Vielen Dank..ist mir einfach nicht aufgefallen.
 
Zurück
Oben