Hello,
if(!session_is_registered('myusername'))
Die Funktion ist so uralt, dass sie schon auf den Keilschrifttafeln der Sumerer durchgestrichen war.
Das kann man übrigens auch unter http://de.php.net/manual/en/function.session-is-registered.php nachlesen.
Der Ablauf ist folgender:
- Session starten
session_start();
- in der Session nachschauen, ob eine Anmeldung registriert ist
define('MAX_WO_REQUEST', 360); ## maximum time without a request in seconds
$now = time();
if(isset($_SESSION['login']['lastrequest'])
and $_SESSION['login']['lastrequest'] > $now-MAX_WO_REQ)
{
$_SESSION['login']['lastrequest'] = $now;
## User is logged
## ... further stuff
## preferably put this whole cahpter in a function
}
else
{
include('../includes/loginpage.php');
## or alternatively
# header('http://example.org/loginpage.php')
exit;
}
- wenn der user nicht angemeldet ist, wie oben gezeigt entweder die Loginseite laden,
auf die Loginseite verweisen, oder auch einfach nur die öffentlichen Inhalte anzeigen
und die Anzeige der "geheimen" Inhalte unterlassen.
Und beim Login wird dann
- die Session gestartet
if (isset($_POST['loginbutton']))
{
## ...
- die geposteten Userdaten (Username und Passwort) mit der Datenbank/Dateieintrag verglichen
- bei Erfolg die Userdaten in die Session eingetragen
$_SESSION['login'] = array();
$_SESSION['login']['lastrequest'] = $now;
$_SESSION['login']['logintime'] = $now;
$_SESSION['login']['username'] = $_POST['username'];
## Das Passwort wollen wir bitte nicht in der Session speichern!
- oder im Misserfolgsfall das ganze Loginteilarray aus der Session rauslöschen
unset($_SESSION['login'];
}
Das bedeutet also für die Logik: Das Vorhandensein einer gültigen Session deutet _nicht_ auch auf eine gültige Anmeldung hin, ist aber Voraussetzung dafür. Eine gültige Anmeldung setzt eine gültige Session voraus.
Die Zeit MAX_WO_REQ (max without request) ist eine Konstante, die Du dir selber definierst und in deiner persönlichen Konfigurationsdatei für das Projekt ablegst. Sie muss kürzer sein, als die systemspezifische Zeit in session.gc_maxlifetime (siehe php.ini). Die kannst Du ggf. auch verlängern. Je länger allerdings ein Session-Identifier gültig ist, desto angreifbarer wird die Session. Das ist aber ein anderes Thema, zu dem sich Christian Seiler hier schon öfter hilfreich ausgelassen hat.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg