Login mit Session will nicht funktionieren

oha ...ich seh gerade, ich hab 'ne Klammer vergessen:
setze mal noch eine geschlossene geschweifte Klammer nach dem echo in der while-Schleife *sorry*
 
Sieht man ja ... in der DB steht im Feld 'name' eben 'Name' und kein md5-Hash, im Feld 'passwort' steht 'PW' - Soooooo kann da natürlich kein Login funktionieren ;)
Du musst die md5-Werte dazu also in den Feldern der Datenbank speichern, damit Du das dann beim Login validieren kannst.

Wäre jetzt nur interessant, wie dort in die DB 'Name' & 'PW' reinkommt - sind das evtl Dummy-Werte, und Du hast vergessen, die richtigen einzuspielen bzw die Registrierung zu des Users zu speichern
 
Da Du ja einen Login benötigst, brauchst Du ja *denke ich* eine Registrierung - es sei denn,es soll nur eine Art Admin-Panel werden, wo nur DU Dich einloggen willst.
Für solche Zwecke erstellst Du halt einfach einen User mit Passwort und haust das in die DB:

PHP:
<?
include_once('db.php');

$user = "dein_user_name";
$pass = "dein_passwort";

$auth = md5($user.$pass);

$SQL = "INSERT INTO teilnehmer (user,passwort) VALUES ('$user', '$auth')";
mysql_query($SQL);

?>

Das schreibst Du in eine extra-Datei, die Du dann später löschen kannst.
Um Dich dann einzuloggen, schreibst Du eine Authentifizierung:

PHP:
<?
session_start();

include_once('db.php');

function login() {
  if( isset($_POST['name'] && isset($_POST['passwort']) ) { 
  $name = $_POST['name']; 
  $pass  = $_POST['passwort']; 
  $auth = $name.$passwort;

  $SQL = "SELECT * FROM teilnehmer WHERE auth='$auth' AND user='$user'";
  $res = mysql_query($SQL);
  if( mysql_num_rows($res) == 1 ) {
    $_SESSION['AUTH'] = 1;
    $_SESSION['UNAME'] = $uname;
  } 
}

Die Login-Funktion baust Du dann einfach dort ein, wo Du Deinen Login "veranstalten" willst ;) Achte jedoch darauf, dass wenn Du in der Session was speichern willst, das nicht unbedingt 100% sicher ist und Du in jeder datei "session_start()" schreiben musst, um die Session aufrecht zu erhalten. Am besten ist, Du schreibst die Session_id() mit in die DB und erstellst einen md5-schlüssel, den Duin der DB und in der Session selbst speicherst.
 
WAS verstehst Du nicht ? wie du einen Schlüssel generierst, oder die Anmeldung/Registrierung selbst ? *g*
 
nein, eine ID speichert man nicht als schlüssel, da sie meist zu kurz ist.
Ein -halbwegs- sicherer Login funktioniert in etwa so:

Wenn der user sich mit username & pw authentifiziert hat, generierst du eine neue session-id, um session-highjacking zu unterbinden, diese session-id speicherst du nach dem login in der datenbank ab, brauchst dazu also noch ein feld in der tabelle:

SQL:
ALTER TABLE teilnehmer ADD sid VARCHAR(32) NOT NULL DEFAULT '0', skey VARCHAR(32) NOT NULL DEFAULT '0';

beim erfolgreichen Login machst du dann folgendes:
PHP:
function login() {
 ..... // wie oben die md5-funktionen 
$SQL = "SELECT user FROM teilnehmer WHERE auth='$auth' AND uname='$uname'";
$res = mysql_query($SQL);
if( mysql_num_rows($res) > 0 ) { // Login erfolgreich
  $sid = session_regenerate_id();
  $key = md5(strtotime(date("Y-m-d H:i:s")));
  $SQL = "UPDATE teilnehmer SET sid='$sid', skey='$key' WHERE auth='$auth' AND user='$uname'";
  mysql_query($SQL);
  $_SESSION['KEY'] = $key;
}
}

function havelogin() {
  if( isset($_SESSION['KEY']) ) {
    $SQL = "SELECT sid FROM teilnehmer WHERE sid='".session_id()."' AND skey='".$_SESSION['KEY']."' LIMIT 1";
    $res = mysql_query($SQL);
    if( mysql_num_rows($res) == 1 )
      return 1;
    else
      return NULL;
  }
  else
    return NULL;
}

mit der 2. Funktion überprüfst Du nun auf Sicherheitsrelevanten Seiten, ob der User angemeldet ist und sein KEY mit dem in der DB übereinstimmt. Wenn nicht, logst Du ihn aus:

PHP:
unset($_SESSION['UNAME'];
unset($_SESSION['KEY'];
session_destroy();
session_start();

Somit kann er beim näxten Seitenaufruf keinen Schaden mehr anrichten, da weder seine Session-Id stimmt noch der Key ;)
 
Zuletzt bearbeitet:
Zurück