PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Codeschnipsel

Login Skript

Zurück zur Übersicht
Ein Login-Skript unter Verwendung von OOP

Hey Leute,

hab nun aufgrund des Tutorialwunsches dieses Tutorial hier geschrieben, und los geht´s:


Das Einbinden der Klasse
Erstmal das einfachste von Allem, erstmal muss die Klasse eingebunden werden. Ich benutze hier aus folgendem Grund require_once():

include: fügt eine Datei beliebig häufg ein und lässt das Skript bei Fehlern weiterlaufen und gibt bloß eine Warnung aus.
require: Tut das gleiche, jedoch bricht es bei einem Fehler das gesamte Skript ab und gibt ne Fehlermeldung aus.
include_once: Gleiche wie include, nur wird hier die Datei nur einmal eingebunden.
require_once: Gleicher Zusatzeffekt wie "include_once"

Hier sollte sofort ersichtlich werden, was für uns geeignet ist. Ohne der Datei geht nix, also benutzen wir require, außerdem braucht man die
Klasse nur einmal einzubinden, mehrmals ist nur schädlich für die Performance, also: "require_once()"

Außerdem gibt es noch heftige Performanceunterschiede bei der Angabe des Pfades zur Datei.
Kurz:

Relativer Pfad (Pfad von der Datei aus) wie zB: "/Ordner/datei.php"
Ist am schlechtesten geeignet!, da PHP den Pfad erstmal neu berechnen muss, gibt es hier die größten Performanceverluste.

Semiabsoluter Pfad (Datei befindet sich im gleichen Verzeichnis) wie zB "./Ordner/datei.php"
Durch den Punkt wird gekennzeichnet, dass vom gleichen Verzeichnis wie die momentan ausgeführte Datei ausgegangen wird.
Diese Datei ist um einiges besser als die relative Pfadangabe, aber es geht noch besser 😉

Absoluter Pfad (Der gesamte Pfad von der Root-Struktur aus) wie zB "C:\\User\UserName\Desktop\Ordner\datei.php"
ist von allen Möglichkeiten am Performancebesten, da hierbei die komplette Zusatzarbeit von PHP abgenommen wird.


Absoluter Pfad in PHP bestimmen
Es gibt eine Konstante namens __FILE__, in dieser ist der momentane Name der Datei definiert.
Nun kombinieren wir das mit der Funktion dirname(), mit dieser Funktion bekommen wir den absoluten
Pfad zu der Datei, die wir als Übergabeparameter übergeben.

<?php
//RDIR als Abkürzung für: Root-Directory (Wurzelverzeichnis)
define ('RDIR', dirname(__FILE__));

require_once (
RDIR . 'login.class.php')
?>



Die Verwendung der PHP-Klasse "Login"
Nachdem wir die Datei nun erfolgreich eingebunden haben, erzeugen wir erstmal ein Objekt, indem wir die Refenz dieser Klasse als Instanz auf in einer
Variable definieren.(Ich liebe es, so zu sprechen xD) Auf Deutsch: wir verwenden den New-Operator 😉


<?php
//RDIR als Abkürzung für: Root-Directory (Wurzelverzeichnis)
define ('RDIR', dirname(__FILE__));

//Die Klasse "Login" einbinden
require_once (RDIR . 'login.class.php')

//Objekt erzeugen
$User = new Login;
?>



Wichtig für die Verwendung der Klasse sind nur 2 Dinge: die Methode (So nennt man die Funktionen in einer Klasse)
logged_in(), diese checkt, ob man eingeloggt ist oder nicht (Rückgabewert true oder false).
Und natürlich, wie man sich ein- und ausloggt. Dies geht über den Construktor (dazu später mehr) und
über die GET-Variable action. also bei ?action=logout wird man automatisch ausgeloggt und
bei ?action=login halt eingeloggt.

Hier mal ein Codebeispiel:

<?php
//RDIR als Abkürzung für: Root-Directory (Wurzelverzeichnis)
define ('RDIR', dirname(__FILE__));

require_once (
RDIR . 'login.class.php')



$User = new Login();

if(
$User->logged_in())
   {
   echo 
'Du bist eingeloggt!<br />';
   echo 
'<a href="?action=logout">Ausloggen</a>';
   }
else
   {
   echo 
'Du bist zur Zeit nicht eingeloggt.';
   echo 
'<form action="?action=login" method="post">
         <input type="password" name="passwort" /><br />
         Dauerhaft einloggen&nbsp;&nbsp;
         <input type="checkbox" name="dauerhaft" /><br />
         <input type="submit" value="Einloggen" />
         </form>'
;
   }
?>


Ist doch ganz simpel, oder?
Diese Klasse hat auch noch den Vorteil, dass sone schwule Weiterleitung nicht mehr nötig ist 😉


Die Klasse im Detail
Allgemein: Die Interzeptormethode (Schönes Wort :)) __construct wird aufgerufen, wenn die
Referenz der Klasse gerade per dem New-Operator auf eine Variable übertragen wird.
Sie wird also per Zeile 10 (Siehe Codeschnipel hier drüber) aufgerufen.
Hier wird nun der Status (On oder Off) gesetzt und auf die GET-Variable "action" geprüft.
Die restlichen Methoden sollten per Kommentate gut genug erklärt sein:

<?php
/**
* Die Login-Klasse
*/
class Login
   
{
   
//Hat den Wert 0 oder 1, on oder off ;)
   
private $status;

   
//Den Namen der Session und des Cookies fest definieren
   
const SNAME = 'LOGGED_IN';

   
   
/**
   * Der Konststruktur, er wird bei der Erzeugung
   * des Objekts aufgerufen. Prüft auf Sessions und
   * Cookies und prüft die GET-Variable "action"
   */
   
public function __construct ()
      {

      
//Die Session starten
      
session_start();

      
//Ist eine Session oder ein Cookie gesetzt?
      
if(isset($_SESSION[self::SNAME]) or isset($_COOKIE[self::SNAME]))
         
$this->status = 1;
      else
         
$this->status = 0;



      
//Erstmal ganz allgemein prüfen,
      //ob sich die GET-Variable in der URL befindet
      
if(isset($_GET['action']))
         {
         
//Wert in einer Variable ablegen
         
$action = $_GET['action'];

         
//Wenn der Wert "login" ist...
         
if($action == 'login')
            {
            
//...prüfen, ob die POST-Variable "dauerhaft" dabei ist,
            //um ggf. das Cookie zu setzen. Diese POST-Variable
            //stammt von einer Check-Box ;)
            
if(isset($_POST['dauerhaft']))
               
$use_cookie = true;
            else
               
$use_cookie = false;

            
//Die Methode login aufrufen und einloggen,
            //evtl. auch das Cookie benutzen
            
$this->login($use_cookie);
            }
         
//Oder der Wert ist "logout", dann...
         
else if($action == 'logout')
            {
            
//... wird sich ausgeloggt, indem die
            //entsprechende Methode aufgerufen wird
            
$this->logout();
            }
         }
      } 
//Konstruktor ENDE


   /**
   * login()
   * @param  boolean  $use_cookie
   * Setzt die Session und ggf. auch das Cookie
   */
   
public function  login ($use_cookie)
      {
      
//Ist der User momentan nicht eingeloggt? Dann...
      
if(!$this->logged_in())
         {
         
//Status auf 1 (On) setzen
         
$this->status = 1;
         
//Session setzen
         //Zugriff auf die Konstante per self::SNAME
         
$_SESSION[self::SNAME] = true;

         
//Falls gegeben, Cookie setzen
         
if($use_cookie)
            
//Die Laufzeit beträgt eine Woche
            //60s * 60 = 1 Stunde
            //1 Stunde * 60 = 1 Tag
            //1 Tag * 7 = 1 Woche
            
setcookie(self::SNAME, true, (time()+60*60*24*7));
         }
      }


   
/**
   Prüft einfach bloß die Eigenschaft und
   stellst dadurch off der on fest
   */
   
public function logged_in ()
      {
      if(
$this->status == 1)
         return 
true;
      else
         return 
false;
      }


   
/**
   * Setzt den Status auf 1 (Off) und
   löscht ggf. die Session oder das Cookie
   */
   
public function logout ()
      {
      if(
$this->logged_in())
         {
         
$this->status = 0;

         if(isset(
$_SESSION[self::SNAME]))
            unset(
$_SESSION[self::SNAME]);

         
//Cookie löschen, indem die Aufenhaltszeit
         //in die Vergangenheit gelegt wird
         
if(isset($_COOKIE[self::SNAME]))
            
setcookie(self::SNAME, false, (time()-60));
         }
      }
   } 
//Login-Kasse ENDE
<?php



Viel Spaß damit!

Im Konstruktor muss diese Teil noch angepasst werden:

<?
         //Wenn der Wert "login" ist...
         if($action == 'login')
            {
            //...prüfen, ob die POST-Variable "dauerhaft" dabei ist,
            //um ggf. das Cookie zu setzen. Diese POST-Variable
            //stammt von einer Check-Box ;)
            if(isset($_POST['dauerhaft']))
               $use_cookie = true;
            else
               $use_cookie = false;

            //Die Methode login aufrufen und einloggen,
            //evtl. auch das Cookie benutzen
            $this->login($use_cookie);
            }


Und zwar müssen hier die Logindaten noch gecheckt werden, zB so:

<?
if($_POST['passwort'] == 'richtig')
   $this->login($use_cookie);
else
   echo 'Falsches Passwort';


Bei dem Else kann auch eine neue Methode aufgerufen werden, die dann die Fehlermeldung übernimmt.

Hier die Demo:
http://alexf.ath.cx/basti/Tutorials/Login/

Das Passwort ist: richter


So ich hoffe, das zeigt das Prinzip soweit ganz gut =)


Anmerkung:
Ich benutze immer Single Quotes (') anstatt Double Quotes ("), weil Single Quotes performaneter
sind, da PHP bei Double Quotes jedesmal den gesamten String nach Variablen durchsucht.
Beispiel:

<?
$var = 'Hallo';

//Ausgabe: Hallo Basti
echo "$var Basti";

echo '<br />';

//Ausgabe: $var Basti
echo '$var Basti';


Gruß Basti!

Kommentare

Autor B.C.

Zurück zur Übersicht
Autor: Nils Reimers
Zurück: URLs im Text identifizieren

Für Fortgeschrittene

  • Objektorientierte Programmierung
  • PHP Sicherheit
  • Script-Beispiele
  • Codeschnipsel
  • Stellenmarkt
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur
  • CasinoAndy Finland
  • Casinoohnelizenz.info
  • Cryptocasinomaster.com
  • CasinoHEX.at
  • inkedin.com

Hoster – Geringste Ausfallzeit

  1. webgo Ø 1 Min.
  2. Linevast Ø 2 Min.
  3. netcup Ø 3 Min.
  4. All-Inkl.com Ø 6 Min.
  5. checkdomain Ø 8 Min.
  6. dogado Ø 17 Min.
  7. bplaced Ø 17 Min.
  8. Contabo Ø 25 Min.
  9. Hetzner Ø 49 Min.
  10. ONE.com Ø 62 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2023

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}