Tag 15 – Login Class


Nachdem ich gestern wiedermal eine sehr umfangreiche Klasse beschrieben habe, heute nun wieder etwas einfacheres – die „Login“-Klasse.

Sie regelt das An- und Abmelden am System. Um die angemeldeten User verwalten zu können, nutze ich Sessions. Deshalb wird im Konstruktor mit der „session_start()“-Funktion eine Verbindung zur Session aufgebaut.

  1. function __construct()
  2. {
  3. session_start();
  4. }

Nach einer erfolgreichen Anmeldung z.B. werden in einer Session-Variablen „$_SESSION[‚REDcms‘]“ die Werte des Benutzers abgespeichert. Das geschieht in der „checkLogin()“-Methode. Sie prüft ob innerhalb der globalen Variablen „$_POST“ die korrekten Angaben sich befinden, die in der Klasse selbst abgespeichert sind.

  1. public function checkLogin()
  2. {
  3. if($_POST[‚user‘] == self::$user && $_POST[‚password‘] == self::$password)
  4. {
  5. $_SESSION[‚REDcms‘] = array();
  6. $_SESSION[‚REDcms‘][‚user‘] = $_POST[‚user‘];
  7. $_SESSION[‚REDcms‘][‚access‘] = 0;
  8. }
  9. header(‚Location: ‚.$_POST[‚request‘]);
  10. exit();
  11. }

Natürlich gibt es auch die „logout()“-Methode, die die gespeicherten Werte aus der Session wieder löscht.

  1. public function logout()
  2. {
  3. $_SESSION[‚REDcms‘] = array();
  4. unset($_SESSION[‚REDcms‘]);
  5. header(‚Location: ‚.$_POST[‚request‘]);
  6. exit();
  7. }

So kann über die „isLogged()“-Methode relativ einfach überprüft werden ob der Benutzer angemeldet ist oder nicht. Das ist besonders bei den Verarbeitungsmethoden der „Page“-, „Box“- und „Menu“-Klasse wichtig.

  1. public function isLogged()
  2. {
  3. if(isset($_SESSION[‚REDcms‘]) && $_SESSION[‚REDcms‘][‚user‘] == self::$user)
  4. {
  5. return true;
  6. }
  7. return false;
  8. }

Als letztes gibt es noch die „getAdminBox()“-Methode. Sie hat die Aufgabe bei nicht angemeldeten Benutzern das Anmelde-Formular, bzw. bei angemeldeten Benutzern eine zusätzliches Menü anzuzeigen.

  1. public function getAdminBox()
  2. {
  3. $content = ‚<h4>Administration</h4>‘;
  4. $tpl = new Template(TEMPLATEPATH);
  5. if(empty($_SESSION[‚REDcms‘]))
  6. {
  7. $tpl->load(‚login.tpl.html‘);
  8. $tpl->set(‚##URL##‘, BASEURL.‚/login.php‘);
  9. }
  10. else
  11. {
  12. $tpl->load(‚logout.tpl.html‘);
  13. $tpl->set(‚##URL##‘, BASEURL.‚/logout.php‘);
  14. $tpl->set(‚##URLPAGE##‘, BASEURL.‚/page/0/add‘);
  15. $tpl->set(‚##URLBOX##‘, BASEURL.‚/box/0/add‘);
  16. $tpl->set(‚##URLMENU##‘, BASEURL.‚/menu/0/add‘);
  17. $tpl->set(‚##USERNAME##‘, $_SESSION[‚REDcms‘][‚user‘]);
  18. }
  19. if(isset($_SERVER[‚REDIRECT_URI‘]))
  20. {
  21. $tpl->set(‚##REQUEST##‘, $_SERVER[‚REDIRECT_URL‘]);
  22. }
  23. else
  24. {
  25. $tpl->set(‚##REQUEST##‘, BASEURL);
  26. }
  27. $content .= $tpl->get();
  28. return $content;
  29. }

Um die An- und Abmeldung relativ einfach zu machen, habe ich für jeden Prozess eine eigene PHP-Seite erstellt. Der Inhalt dieser Dateien ist sehr überschaubar.

  1. <?php
  2. error_reporting(E_ALL | E_WARNING);
  3. require_once ‚includes.php‘;
  4. $login = new Login();
  5. $login->checkLogin();
  6. ?>
  1. <?php
  2. error_reporting(E_ALL | E_WARNING);
  3. require_once ‚includes.php‘;
  4. $login = new Login();
  5. $login->logout();
  6. ?>

Zu einem späteren Zeitpunkt werde ich wahrscheinlich diese separaten Dateien mit in die „index.php“-Datei integrieren.

Downloads

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.