Login mit MySQl &PHP

matze1983

Erfahrenes Mitglied
Ich habe das Tutorial von Chaosengel Gabriel verwendet, jedoch funktioniert es nicht, wenn Cokkies nicht aktiviert sind. Habe schon Kontakt aufgebaut, jedoch kamen wir auf keine Lösung des Problems, wie sowas aussehen könnte. Jeden falls müsste die Session-ID in die URL mit eingefügt werden oder? Ich habe da überhaupt kein Plan wie so etwas funktionieren soll. Bitte um Rat:-). Vielen Dank schon mal im Voraus.
Script von der login.php
PHP:
include('sessionhelpers.inc.php'); 
if (isset($_POST['login'])) 
{ 
    $userid=check_user($_POST['username'], $_POST['userpass']); 
    if ($userid!=false) 
        login($userid); 
    else 
        echo "Deine Anmeldedaten sind nicht korrekt!"; 
} 
if (!logged_in()) 
    echo "<form method='post' action='login.php'> 
        <label>Benutzername:</label><input name='username' type='text'><br> 
        <label>Passwort: </label><input name='userpass' type='password' id='userpass'><br> 
        <input name='login' type='submit' id='login' value='Einloggen'> 
    </form>"; 
else 
    echo "<a href=\"logout.php\">Ausloggen</a>"; 
echo "<p /><a href=\"logged_in.php\">Check</a>"; 
?>
Script von der sessionhelpers.inc.php
PHP:
<? 
function connect() 
{
    $con= mysql_connect('xxx,'xxx','xxx') or die(mysql_error()); 
     mysql_select_db('xxx',$con) or die(mysql_error()); 
} 

function check_user($name, $pass) 
{ 
    $sql="SELECT id 
    FROM users 
    WHERE username='".$name."' AND userpass=MD5('".$pass."') 
    LIMIT 1"; 
    $result= mysql_query($sql) or die(mysql_error()); 
    if ( mysql_num_rows($result)==1) 
    { 
        $user=mysql_fetch_assoc($result); 
        return $user['id']; 
    } 
    else 
        return false; 
} 

function login($userid) 
{ 
    $sql="UPDATE users 
    SET usersession='".session_id()."' 
    WHERE id=".$userid; 
     mysql_query($sql); 
} 

function logged_in() 
{ 
    $sql="SELECT id 
    FROM users 
    WHERE usersession='".session_id()."' 
    LIMIT 1"; 
    $result= mysql_query($sql); 
      return ( mysql_num_rows($result)==1); 
} 

function logout() 
{ 
    $sql="UPDATE users 
    SET usersession=NULL 
    WHERE usersession='".session_id()."'"; 
     mysql_query($sql); 
} 

connect(); 
?>
 
Test mal
PHP:
ini_set('session.use_trans_sid', '1');
ini_set('session.use_cookies', '1');
ini_set('session.use_only_cookies', '0');
vor
PHP:
session_start();
 
Also hab grad mal mit Cookies deaktivieren rumprobiert und die Session-ID wird an den Check-Link angehängt, sowie als Hidden-Feld dem <form> hinzugefügt...
Ersetz mal die Zeile
PHP:
WHERE username='".$name."' AND userpass=MD5('".$pass."')
durch
PHP:
WHERE username='".$name."' AND userpass='".md5($pass)."'
in der check_user Funktion, bzw falls du den User/Pass Eintrag in deiner User-Tabelle manuell vorgenommen hast: Hast du da auch den md5 des Passworts reingeschrieben anstatt dem Passwort in unverschlüsselter Form ?
 
hab den Code geändert. Jedoch bleibt der Status gleich.

Das Passwort steht in der Datenbank unverschlüsselt, also in dem Fall "123"

hab es auch mal probiert dass das Passwort verschlüsselt war, jedoch ging dies auch nicht..hab es nur mal probiert:-) weil wenn du sagst es soll unverschlüsselt stehn, aber das tat es wie gesagt auch, weil ich die Daten per Hand in die Tabelle geschrieben hab:-)
 
Das Passwort muss da verschlüsselt rein!
Also in der md5-Kodierten Form!
Sonst ist der vergleich ja sowas wie 123 == def202cb962ac59075b964b07152d234b70, was logischerweise nicht zutrifft.
Also in die DB muss def202cb962ac59075b964b07152d234b70, wenn du dann dein Passwort eingibst, in der Form 123, dann wird mittels der md5-Funktion in dem Moment der md5 des Passworts gebildet, worauf aus dem ganzen dann def202cb962ac59075b964b07152d234b70 == def202cb962ac59075b964b07152d234b70 wird -> Bingo ;)
 
ja das erklärt sich dann, dass es dann so sein muss.
Aber für mich stellt sich die Frage, dass wenn ich es mit MD5 kodieren lasse, warum bei mir immer das selbe heraus kommt.
für: abc="d41d8cd98f00b204e9800998ecf8427e"
für 123 ebenfalls="d41d8cd98f00b204e9800998ecf8427e", da ist ja kein unterschied, .liegt es an meiner Zeile zum einlesen?
PHP:
 $query="  UPDATE users SET userpass='".md5($userpass)."' WHERE id='2';";
 
Überprüf mal ob du nicht ausversehn irgendwo die Variable $userpass überschreibst!
md5 von 123 : 202cb962ac59075b964b07152d234b70
md5 von abc : 900150983cd24fb0d6963f7d28e17f72
 
Zurück