Gut, dann wollen wir mal die schöne heile Welt zerstören ...
Was passiert, wenn einem die Anwendung über eine Abnormal Program Termination (unter Delphianern auch lapidar als "Exception" bezeichnet) um die Ohren fliegt und daher die Abmeldung nicht erfolgt?
1. Möglichkeit: Der User bleibt unendlich lange angemeldet. Beim nächsten Login-Versuch wird dieser Datensatz einfach überschrieben und alles ist gut.
2. Möglichkeit: Der User bleibt unendlich lange angemeldet. Beim nächsten Start greift ein "Sicherheitssystem", welches Mehrfach-Logins verhindert, wodurch im schlimmsten Fall der Administrator-Account nicht mehr in die Anwendung kommt.
Der erste Fall ist trivial und kann daher vernachlässigt werden. Wenn er auftritt, ist die dahinterstehende Anwendung relativ KISS gehalten und daher überschaubar. Interessanter ist der zweite Fall, da dieser wirkliche Probleme verursachen kann.
Gut, was hilft also gegen das zweite Problem: ein einfaches "LastActivityTime-Feld im Login-Datensatz, wodurch eine Art "Session" emuliert wird. Bevor dann nämlich ein Login ausgeführt wird, brauch mann einfach nur ein generelles UPDATE durchzuführen, mit dem man sagt:
SQL-Anweisung
1:
| UPDATE `users` SET `online` = '0' WHERE `LastActivity` < :CurrentTimestamp - :SessionLength |
Wobei sowohl
:CurrentTimestamp als auch
:SessionLength zwei Query-Parameter sind, mit dem aktuellen Timestamp, sowie der maximalen Inaktivitätsdauer, nach der ein User automatisch vom System abgemeldet wird.
2ct
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.