Moin!
Beispiel: Ein einfaches Login-Formular; der Benutzer hat einen falschen Namen oder ein falsches Passwort angegeben.
(1) State: unvollständig/fehlerhaft. Das Formular wird nochmal gezeigt, solange bis alles stimmt.
Schlechtes Beispiel. Schon aus Gründen der Sicherheit ist es immer eine gute Idee alles, was mit Authentifizierungen zu tun hat, so einfach wie möglich zu halten.
Also sieht ein Login-Skript für einen Admin-Bereich bei mir so aus:
<?ebb #execute by brain
if (Überhaupt erwartete Daten gesendet?) {
if (Auth erfolgreich?) {
session starten;
Auth registrieren;
ggf. FailZähler Löschen;
ggf. Weiterleitung oder include der Zielseite aus session, sonst standard-Seite
exit;
}
ggf. FailZähler setzen, prüfen, und im Ernstfall reagieren -> (Bei mir gerne: Zugriffsverbot in .htaccess);
ggf. mesg setzen;
}
ggf. {
primitives Template laden
ggf. mesg. einfügen
zeigen;
} else {
Formular + ggf. mesg. zeigen;
} # immer:
exit;
?>
Die zu schützenden Scripte bekommen, bevor irgendetwas anderes getan wird als Einzeiler mit require ein include (Weil es ein Einzeiler + Kommentar ist) auferlegt:
<?ebb
session starten;
if (Auth nicht registriert oder ungültig?) {
ggf. aktuelle Seite als Zielseite in Session schreiben;
ggf. mesg. setzen (z.B. "He! Du MF: Machst Du ScheißCookies an!");
ggf. Weiterleitung zum Login; # oder
ggf. böses die(); #siehe 2 Zeilen weiter oben # oder:
ggf. 403er header; # immer:
exit;
}
# Wer hier noch "lebt" ist berechtigt: EOI (end of include); auto: back zum #main
Alles, was hinter "ggf." steht sind optionale Aufgaben, die über die Authentifizierung an sich hinausgehen.
Das sind alles "Wenigzeiler" oder die von mir besprochenen Nägel und ich glaube fest daran, dass jeder hierfür unnötige Befehl eine Fehlerquelle ist. Also sind Login-Geschichten Direktkandidaten für transparentes, schnödes, pragmatisches, prozedurales Programmieren (soweit wie keine nativen Objekte der Sprache oder des Template-Systems) benutzt werden können) ohne formalen Überbau.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix