kEv*: nach Login gültigen Account prüfen

Beitrag lesen

Hallo liebe SELFHTMLer,

Danke H☼psel.
Dein Hinweis war die gesuchte Lösung.

login.php

  
<?php  
if ($_SERVER['REQUEST_METHOD'] == 'POST'){  
 session_start();  
 $_SESSION['error'] = "";  
 $hostname = $_SERVER['HTTP_HOST'];  
 $path = dirname($_SERVER['PHP_SELF']);  
  
 # php includieren  
 include('constanten.inc.php');  
 include('functions.inc.php');  
 connect();  
  
 # auf Benutzername UND Passwort prüfen  
 # mysql_real_escape_string() zum verhindern von SQL - Injections  
 $sql = mysql_query("SELECT * FROM user WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND password = '".md5(mysql_real_escape_string($_POST['password']))."' ");  
 $res = mysql_num_rows($sql);  
 if ($res == 1){  
  
  $data = mysql_fetch_object($sql);  
  # Accountcheck  
  if ($data->expire < DateTime){  
   $_SESSION['error'] = ACCOUNTEXPIRED;  
  }  
  elseif($data->accountstatus == 1){  
   $_SESSION['error'] = ACCOUNTNOTENABLED;  
  }  
  elseif($data->accountstatus == 2){  
   $_SESSION['error'] = ACCOUNTLOCKED;  
  }  
  
  # Server Protocol prüfen  
  if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1'){  
   if (php_sapi_name() == 'cgi'){  
    header('Status: 303 See Other');  
    }  
   else{  
    header('HTTP/1.1 303 See Other');  
   }  
  }  
  # Weiterleitung zum internen Bereich  
  if (!$_SESSION['error']){  
   # Benutzerinformationen in den Sessionvariablen speichern  
   $_SESSION['loggedin'] = true;  
   $_SESSION['uid'] = $data->uid;  
   $_SESSION['username'] = $data->username;  
   $_SESSION['levelid'] = $data->levelid;  
   $_SESSION['sessionid'] = session_id();  
  
   # user Tabelle aktualisieren  
   mysql_query('UPDATE user SET sessionid = "' . session_id() . '", lastlogin = NOW() WHERE uid = "' . $_SESSION['uid'] . '" LIMIT 1');  
  
   header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php?sid='.$_SESSION['sessionid']);  
   disconnect();  
   exit;  
  }  
 }  
 # fehlerhafter Login  
 # ggf. Errorhandling  
 else{  
  $_SESSION['error'] = INVALIDLOGIN;  
 }  
}  
?>  
  
hier kommt DOCTYPE und Co.  
...  
  
    <?php  
 if (isset($_SESSION['error']) && $_SESSION['error']){  
 ?>  
    <tr>  
     <td colspan="2" class="error"><?php echo $_SESSION['error']; ?></td>  
    </tr>  
    <?php  
 }  
 ?>  
...  
  

constanten.inc.php

  
<?php  
define('DateTime',date('Y-m-d H:i:s', time()));  
  
  
# Fehlermeldungen  
define('INVALIDLOGIN','Benutzername und/oder Passwort fehlerhaft!');  
define('ACCOUNTLOCKED','Ihr Account ist gesperrt!');  
define('ACCOUNTNOTENABLED','Ihr Account ist nicht freigeschaltet!');  
define('ACCOUNTEXPIRED','Ihr Account ist abgelaufen!');  
?>  

logout und auth.php sind nur gering geändert zu dem LoginScript hier auf SELFHTML.

Was kann ich besser machen, oder ggfs. sicherer?
Soweit funktioniert das Login und ich bin zufrieden.

Danke nochmal an alle Beteiligten für die Hilfe.
LG
kev1n

--

SELFCODE:
sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
---