php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack (2) Themen-Optionen Thema bewerten
Alt 05.08.2007, 17:30  
Erfahrener Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 101
XraYSoLo befindet sich auf einem aufstrebenden Ast
XraYSoLo eine Nachricht über ICQ schicken XraYSoLo eine Nachricht über MSN schicken XraYSoLo eine Nachricht über Skype™ schicken
Standard ein login-system, basierend auf MySQL und sessions

erfahrungsgemäß wollen PHP-anfänger immer gleich hoch hinaus. dies beginnt z.b. oft mit der typischen, sog. clan-page über eine eigene community hinweg zum größeren vorhaben (was leider oft scheitert, da man nicht immer bereit ist, sich auch mal theorie anzulesen).
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>
damit ist das formular schon fertig.

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
   );
weswegen die spalte u_pass 33 stellen hat, kann weiter unten gelesen werden.

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
?>
nun muss noch eine verbindung mit der datenbank aufgebaut werden, die geschieht der besseren übersicht wegen durch eine weitere datei.

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();
    }
?>
es wird also jedes mal geprüft, ob etwas NICHT ausgeführt wurde. sobald eine der beiden funktion FALSE ausgibt, wird der vorgang abgebrochen.

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();
                        }
            }
?>
die datei intern.php ist ganz einfach zu erstellen.

intern.php
PHP-Code:
<?php
session_start
();
include_once(
'val_login.php');

echo 
'hallo' .$_SESSION['u_name'].', willkommen im internen bereich';
?>
das wars auch, aber moment! in der intern.php taucht eine datei auf, die noch nicht besprochen wurde, die val_logn.php.

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();
    }
?>
zuguterletzt müsst ihr euch auch noch ausloggen können.

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');
?>
ach ja, es fehlt noch die begründung der 33 stellen im passwort-feld.
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');
?>
so, ich hoffe, ich habe euch den das login-system etwas näher gebracht. dieses system ist sofort einsatzbereit und auf fehler geprüft.
sollte irgendetwas unklar sein, berichtet es mir und ich werde es editieren.

Nils aka XraYSoLo

Geändert von XraYSoLo (17.11.2007 um 10:16 Uhr).
XraYSoLo ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.08.2007, 17:56  
Erfahrener Benutzer
 
Registriert seit: 30.07.2007
Beiträge: 162
Ambience befindet sich auf einem aufstrebenden Ast
Ambience eine Nachricht über ICQ schicken
Standard

Hast aber einen Fehler drinne...

Bei: val_login.php

da steht:

PHP-Code:
header('login.html'); 
gehören tut es aber:

PHP-Code:
header('location: login.html'); 
Und bei: logout.php

würde ich aus:

PHP-Code:
<?php
session_start
();

//die sessions auf FALSE setzen
$_SESSION['logged'] = FALSE;
$_SESSION['u_name'] = FALSE
das hier machen, sprich die sessions löschen:

PHP-Code:
<?php
session_start
();

session_destroy();

Geändert von Ambience (05.08.2007 um 18:17 Uhr). Grund: owe, was fragst du mich?
Ambience ist offline   Mit Zitat antworten
Alt 05.08.2007, 18:05  
Erfahrener Benutzer
 
Registriert seit: 10.09.2006
Beiträge: 101
XraYSoLo befindet sich auf einem aufstrebenden Ast
XraYSoLo eine Nachricht über ICQ schicken XraYSoLo eine Nachricht über MSN schicken XraYSoLo eine Nachricht über Skype™ schicken
Standard

done ^^.

Nils aka XraYSoLo
XraYSoLo ist offline   Mit Zitat antworten
Alt 07.08.2007, 07:01  
Erfahrener Benutzer
 
Registriert seit: 03.08.2007
Beiträge: 127
fragnicht befindet sich auf einem aufstrebenden Ast
Standard

mmh ich wurde vorallem mysql_escape_string mit reinsetzten bei den $_POST ansonsten ist das login nicht so sicher desweiteren würd ich die session in der sql tabelle speichern sonst sind mehrfach logins möglich

greetz Illus23
fragnicht ist offline   Mit Zitat antworten
Alt 07.08.2007, 07:39  
Benutzer
 
Registriert seit: 02.08.2007
Beiträge: 50
Benutzername befindet sich auf einem aufstrebenden Ast
Benutzername eine Nachricht über ICQ schicken
Standard

aber mehrfach logins sind doch nichts schlechtes... wenn ich seh, wie wir in der firma hier am testen sind, wenn wir ein neues projekt starten. dann brauchen wir auf jeden fall mehrfachlogins.
Benutzername ist offline   Mit Zitat antworten
Alt 07.08.2007, 08:39  
Erfahrener Benutzer
 
Registriert seit: 03.08.2007
Beiträge: 127
fragnicht befindet sich auf einem aufstrebenden Ast
Standard

oke gebe *Schande auf mein Haupt* kommt natürlich immer drauf an wo man es verwendet gerade in unserer Firma sind Mehrfachlogins aus Sicherheitsgründen verboten und ich dachte noch an Browsergames wo Mehrfachlogins auch nicht ganz Sinnvoll wären
fragnicht ist offline   Mit Zitat antworten
Alt 07.08.2007, 18:29  
Erfahrener Benutzer
 
Registriert seit: 30.07.2007
Beiträge: 162
Ambience befindet sich auf einem aufstrebenden Ast
Ambience eine Nachricht über ICQ schicken
Standard

PHP-Code:
mysql_escape_string(); 
was sollen daran besser sein als an:

PHP-Code:
mysql_real_escape_string(); 
@fragnicht?

Ich persönlich, würde noch die $_POST felder addslashen...


Ambience
__________________
Ich gebe gerne ICQ-Support gegen ein kleines Endgelt.
Ambience ist offline   Mit Zitat antworten
Alt 07.08.2007, 18:41  
Erfahrener Benutzer
 
Registriert seit: 03.08.2007
Beiträge: 127
fragnicht befindet sich auf einem aufstrebenden Ast
Standard

oh sry habe mysql_real_escape_string nicht gesehn
fragnicht ist offline   Mit Zitat antworten
Alt 16.08.2007, 10:42  
Erfahrener Benutzer
 
Registriert seit: 16.08.2007
Beiträge: 702
PHP-Kenntnisse:
Anfänger
Igäl befindet sich auf einem aufstrebenden Ast
Standard

Beim File check_login.php --> if(mysql_num_rows($reuslt) != 1)
Ich vermute mal stark, du wolltest da eigentlich $result nehmen.

Ausserdem ist der Gebrauch des Message-Digest Algorithmus' keine Verschlüsselungsmethoden. Zeichenketten die mit md5() bearbeitet wurden sind NICHT verschlüsselt. Es wurde lediglich gemäss einem Pattern ein Hash erstellt der übrigends NICHT 32 sondern 128 Bit lang ist. Dieser 128 Bit lange String wird lediglich durch einen 32 ZEICHEN langen String ausgedrückt (Nachzulesen auch auf Message-Digest Algorithm 5 - Wikipedia).

Ansonsten finde ich es ein gelungenes Tutorial. Weiter so.
Igäl ist offline   Mit Zitat antworten
Alt 16.08.2007, 11:35  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Wenn man die Felder anständig validiert, kann man auf addslashes und co verzichten. Reguläre Ausdrücke sind ein mächtige Werkzeug
KingCrunch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/php-fortgeschrittene/30-ein-login-system-basierend-auf-mysql-und-sessions.html
Erstellt von For Type Datum
Login Bereich ausfertigen - PSD-Tutorials.de - Forum This thread Pingback 08.07.2008 20:37
Administration This thread Refback 09.12.2007 14:18

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Login System matii PHP Tipps 2008 6 16.04.2008 11:35
Login System Probleme ! 7Style PHP Tipps 2008 2 07.01.2008 13:55
ein einfacher counter mit reload-/IP-sperre, basierend auf MySQL XraYSoLo PHP-Fortgeschrittene 7 09.10.2007 12:55
SESSIONS über MYSQL Problem - schreiben lesen Cyberbob_at_tot PHP Tipps 2005-2 9 19.09.2005 13:17
sessions und mysql schmiddy PHP Tipps 2005-2 5 12.06.2005 23:54
System mit Mysql (weit läufige Frage) Beitragsarchiv 1 03.05.2005 15:53
MYSQL root login und logging Problem Datenbanken 2 16.03.2005 08:41
[Erledigt] problem mit login skript | mysql | cookie PHP Tipps 2004-2 13 07.12.2004 19:01
login mit MySQL PHP Tipps 2004-2 15 25.11.2004 10:20
Vertriebs - System auf PHP / MySql Basis dh1sbg Beitragsarchiv 4 18.11.2004 10:20
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
fragen zu einem Login und Zeit blabla über MySQL PHP Tipps 2004 10 12.09.2004 15:21
PHP mysql problem beim login. c01001 PHP Tipps 2004 8 05.08.2004 15:57
php login mit mysql c01001 PHP Tipps 2004 2 04.08.2004 21:30
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php login mysql session, php session login mysql, php login session mysql, login php mysql session, php login system mit sessions, login session php mysql, php mysql login session, php mysql session login, php session login system, login system mit sessions mysql, php login system session, php mysql login mit session, php login session mit mysql, einfaches login system mit php und sql, login session mit mysql php, php my sql login mit session, login system mit sessions php, login mit mysql und session, login system php session, php mysql login@mit@session

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum