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.
- function __construct()
- {
- session_start();
- }
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.
- public function checkLogin()
- {
- if($_POST['user'] == self::$user && $_POST['password'] == self::$password)
- {
- $_SESSION['REDcms'] = array();
- $_SESSION['REDcms']['user'] = $_POST['user'];
- $_SESSION['REDcms']['access'] = 0;
- }
- header(‘Location: ‘.$_POST['request']);
- exit();
- }
Natürlich gibt es auch die „logout()“-Methode, die die gespeicherten Werte aus der Session wieder löscht.
- public function logout()
- {
- $_SESSION['REDcms'] = array();
- unset($_SESSION['REDcms']);
- header(‘Location: ‘.$_POST['request']);
- exit();
- }
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.
- public function isLogged()
- {
- if(isset($_SESSION['REDcms']) && $_SESSION['REDcms']['user'] == self::$user)
- {
- return true;
- }
- return false;
- }
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.
- public function getAdminBox()
- {
- $content = ‘<h4>Administration</h4>’;
- $tpl = new Template(TEMPLATEPATH);
- if(empty($_SESSION['REDcms']))
- {
- $tpl->load(‘login.tpl.html’);
- $tpl->set(‘##URL##’, BASEURL.‘/login.php’);
- }
- else
- {
- $tpl->load(‘logout.tpl.html’);
- $tpl->set(‘##URL##’, BASEURL.‘/logout.php’);
- $tpl->set(‘##URLPAGE##’, BASEURL.‘/page/0/add’);
- $tpl->set(‘##URLBOX##’, BASEURL.‘/box/0/add’);
- $tpl->set(‘##URLMENU##’, BASEURL.‘/menu/0/add’);
- $tpl->set(‘##USERNAME##’, $_SESSION['REDcms']['user']);
- }
- if(isset($_SERVER['REDIRECT_URI']))
- {
- $tpl->set(‘##REQUEST##’, $_SERVER['REDIRECT_URL']);
- }
- else
- {
- $tpl->set(‘##REQUEST##’, BASEURL);
- }
- $content .= $tpl->get();
- return $content;
- }
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.
- <?php
- error_reporting(E_ALL | E_WARNING);
- require_once ‘includes.php’;
- $login = new Login();
- $login->checkLogin();
- ?>
- <?php
- error_reporting(E_ALL | E_WARNING);
- require_once ‘includes.php’;
- $login = new Login();
- $login->logout();
- ?>
Zu einem späteren Zeitpunkt werde ich wahrscheinlich diese separaten Dateien mit in die „index.php“-Datei integrieren.
