Login mit MySQl &PHP

Wenn hier schon mal das thema Cookies waren! ich habe versucht in dieses tutorial cookies einzubauen leider weiss ich nicht wie ich das hinbekomme! Bekomme immer fehlermeldungen (hab ich jetzt nicht mehr eingebaut)! Könnte vieleicht jemand für dieses tutorial auch cookies einbauen Ansonsten t das Tutorial ganz gut und ein paar veränderunge habe ich auch schon eingebaut! Wäre gut wenn man auch wie hier bei tutorials.de auswählen kann ob man beim nächsten besuch eingeloggt sein möchte oder nicht!
 
Also aud ie Variable $userpass wird nirgends mehr zugegriffen, hab das script nur mal fix geschrieben, um es in md5 zu kodieren, kann es an der Länge des Varchar leigen, hab es auf 32 eingestellt?

Also von Cookies hab ich keine Ahnung, drum verusch ich es auch zu umgehen:-)
 
kommst d immer noch nihct rein? ich würdemal sagen! Zeig dochmal das formularscript login und sessionhelper.php und das was du in der datenbank stehen hast (genau)! Weil bei mir t es alles tadellos!
 
kommst du immer noch nicht rein? ich würde mal sagen! Zeig dochmal das formularscript login und sessionhelper.php und das was du in der datenbank stehen hast (genau)! Weil bei mir geht alles tadellos!
 
also ich verusche ja nun ohne cookies da zu realisieren...
aber es klappt alles nicht:(
die loggin.php

PHP:
<?

session_start(); 
ini_set('session.use_trans_sid', '1'); 
ini_set('session.use_cookies', '1'); 
ini_set('session.use_only_cookies', '0');  

ini_set('display_errors', 'on');
error_reporting(E_ALL); 
 



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>"; 
?>

die 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(); 
?>

und die datei zur veränderung des passworts
PHP:
<?
extract($_SERVER);
extract($_ENV);
extract($_GET);
extract($_POST);
extract($_REQUEST);

echo"<center>
<form method='post' enctype='multipart/form-data' action='$PHP_SELF'>
<table>
<tr>
 <td>passwort:</td>
 <td><input type='text' name='name' size='20'></td>
</tr>
</table>
<br>
<br>
<input type='submit' name='gesendet' value='Eintragen!' >
";

if($_POST['gesendet'])
{

$verbindung = mysql_connect ("xxx","xxx","xxx" );
if (!$verbindung)
{
	die("Konnte keine Verbindung aufbauen!");
}


$verbindung = mysql_select_db("xxx", $verbindung);
if (!$verbindung)
{
	die("Konnte Daten nicht ändern!". mysql_error() );
}

// Insert
   $query="UPDATE users SET userpass='".md5($userpass)."' WHERE id='1';";
			
			
			
// Eintragen in Datenbank 
 $result= mysql_query($query);
if(!$result)
{
	die("Konnte nicht eintragen!".mysql_error() );
}
}
?>
 
Zuletzt bearbeitet:
Ach ich könnt die Weltumarmen:-D endlich es funktioniert......

Toll danke Leute, supi!

Aber mal ne Frage, warum möchtest das noch groß artig verändern wenn es funktioniert bei dir? Weil Cookies werden doch meistens eh geblockt, je nach einstellungen, drum würde ich doch lieber an deiner Stelle drauf verzichten. Wie gesagt ich kann dir da leider nicht helfen, aber es scheint wohl dass du auch an einem Forum bastelst mit Userbereich?
 
Hallo harderph,

um das zu erreichen, solltest du die User-DB um ein Feld erweitern, "loginhash" o.Ä.!
Wenn der User die "Eingeloggt-bleiben"-Funktion nutzen will (am besten ne Checkbox mit zum Login-Formular packen), das Cookie setzen:
PHP:
if (isset($_POST['login'])) 
{ 
    $userid=check_user($_POST['username'], $_POST['userpass']); 
    if ($userid!=false) 
        if($_POST['stay_loggedin']){ // die aktivierte Checkbox namens stay_loggedin wurde ausgewählt
        $loginhash = md5($userid.microtime());
        setcookie("stayloggedin",$loginhash,time()+3600*24*28); // 4 Wochen gültig
        $sql="UPDATE users 
        SET loginhash='".$loginhash."' 
        WHERE id=".$userid; 
        mysql_query($sql); 
        }

        login($userid); 
    else 
        echo "Deine Anmeldedaten sind nicht korrekt!"; 
}
Also: Wenn eingeloggt bleiben soll, wird ein Login-Hash generiert, der sich z.B. aus dem md5 von user-ID und microtime zusammensetzt, dieser wird nun als Cookie beim user gespeichert.
Außerdem wird er in der User-Tabelle im Feld loginhash abgelegt.
Wenn jetzt ein User wieder auf deine Seite geht, der beim vorigen Login eingeloggt bleiben wollte, so muss der das Cookie "stayloggedin" gesetzt haben, also überprüfen und reagieren
PHP:
if(isset($_COOKIE['stayloggedin']) && strlen(mysql_real_escape_string($_COOKIE['stayloggedin'])) == 20){ // Absicherung gegen bösen Cookieinhalt
$sql="SELECT id FROM users 
    WHERE loginhash=".$_COOKIE['stayloggedin']; 
$result = mysql_query($sql);
$user=mysql_fetch_assoc($result);
if(empty($user['id'])){ // Manipulationsversuch,ungültiger Hash -> Cookie entfernen
setcookie("stayloggedin","",time()-600);
die();
}
login($user['id']);
}
Und noch die logout-Funktion um das Rücksetzen des Inhalts des "loginhash"-Feldes erweitern, sowie das Cookie zu löschen, damit die Logout Funktion funktioniert!

MfG
 
Ich finde die sache mit dem
Code:
extract($_POST)
ist gefährlich. Und was macht dieser Teil
Code:
return ( mysql_num_rows($result)==1);
in der Funktion logged_in?
 
Zum Verständnis @harderph und matz1983:
matze ging es eigentlich drum, dass die Session nicht erhalten bleibt, weil das Session-Cookie nicht angenommen wird und nicht per URL/Hidden-Feld weitergegeben wurde!
Dein Ansatz, harderph, also eine Eingeloggt-bleiben-Funktion zu integrieren, ist ohne Cookies nicht möglich.

MfG
 
Zurück