das login-system, das ich vorstelle ist ein einfaches, aber sehr sicheres und effizientes, das durchaus noch weiter ausgebaut werden kann.
man beginnt mit dem einfachsten, dem formular.
erstellt ein formular nach euren wünschen oder richtet euch nach dem hier gegebenen:
login.html
Code:
<form action="check_login.php" method="POST"> username: <br> <input type="text" name="u_name"> <p> password: <br> <input type="password" name="u_pass"> <p> <input type="submit" value="login"> </form>
als nächstes muss eine datenbankstruktur her, die in einer SQL-datei abgelegt auf einem SQL-server ausgeführt und mit benutzerdaten gefüttert wird.
hier wird auf eine MySQL-datenbank zurückgegriffen:
structure.sql
Code:
CREATE TABLE u_users ( u_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, u_name VARCHAR(50) NOT NULL, u_pass VARCHAR(33) NOT NULL );
es wird noch eine konfigurationsdatei benötigt, in der die zugriffsdaten für den server gespeichert sind.
config.inc.php
PHP-Code:
<?php
//eine variable als array deklarieren, um mehrere werte in einem zusammenzufassen
$_access = array();
$_access['host'] = 'localhost'; //kann abweichen, ist aber meistens "localhost"
$_access['user'] = ''; //der benutzername
$_access['pass'] = ''; //das passwort
$_access['name'] = ''; //der name der datenbank
?>
connect.inc.php
PHP-Code:
<?php
if(!$conn = mysql_connect($_access['host'], $_access['user'], $_access['pass']))
{
echo 'verbindung zu '.$_access['host'].' fehlgeschlagen';
exit();
}
if(!$db_select = mysql_select_db($_access['name']))
{
echo 'die erforderliche datenbank antwortet nicht';
exit();
}
?>
jetzt die eigentliche login-funktion, die eher eine überprüfung darstellt und dementsprechend reagiert.
check_login.php
PHP-Code:
<?php
session_start();
//konfiguration und verbindungsdaten holen
include_once('config.inc.php');
include_once('connect.inc.php');
//prüfen, ob die eingabefelder ausgefüllt wurden
if(empty($_POST['u_name']) || empty($_POST['u_pass']))
{
//wenn sie nicht ausgefüllt wurden
echo 'es wurden nicht alle relevanten felder ausgefüllt';
exit();
}
//wenn sie ausgefüllt wurden
else
{
//eine SQL-abfrage vorbereiten und sie abschicken
$sql = "SELECT u_id,
u_name,
u_pass
FROM u_users
WHERE u_name = '".mysql_real_escape_string($_POST['u_name'])."'
AND u_pass = '".md5($_POST['u_pass'])."'
";
$result = mysql_query($sql) or die(mysql_error());
//prüfung, ob genau eine der spalten mit der eingabe überein stimmt
if(mysql_num_rows($result) != 1)
{
//wenn nicht übereinstimmt
echo 'sie konnten nicht als benutzer identifiziert werden';
exit();
}
//wenn übereinstimmt
else
{
//eine session "logged" auf TRUE setzen
//eine session mit dem usernamen erstellen
$_SESSION['logged'] = TRUE;
$_SESSION['u_name'] = $_POST['u_name'];
//auf die geschützte datei weiterleiten
header('location: intern.php');
exit();
}
}
?>
intern.php
PHP-Code:
<?php
session_start();
include_once('val_login.php');
echo 'hallo' .$_SESSION['u_name'].', willkommen im internen bereich';
?>
val_login.php
PHP-Code:
<?php
//prüfen, ob die session "logged" FALSE ist
if($_SESSION['logged'] == FALSE)
{
//wenn FALSE, dann zum login-formular weiterleiten
header('location: login.html');
exit();
}
?>
logout.php
PHP-Code:
<?php
session_start();
//die sessions auf FALSE setzen
$_SESSION['logged'] = FALSE;
$_SESSION['u_name'] = FALSE;
//zum login-formular weiterleiten
header('location: login.html');
?>
aus sicherheitsgründen wird das passwort eines benutzers in der datenbank verschlüsselt, hierzu wird die funktion md5() genutzt. sie verschlüsselt auf 32 bit, belegt als genau 32 stellen.
wenn man etwas md5-verschlüsselt ausgeben will, nutzt man einfach folgenden code-schnippsel:
PHP-Code:
<?php
echo md5('mich muss man verschlüsseln');
?>
sollte irgendetwas unklar sein, berichtet es mir und ich werde es editieren.
Nils aka XraYSoLo
Einen Kommentar schreiben: