Hello,
wie wäre es mit einer aussagefähigen Dokumentation des Codes?
- Woher kommen die einzelnen Variablen?
- Was bedueten die einzelnen Variablen?
- Wie sehen die Methoden aus, die hier benutzt werden?
Generell zum Thema "Logout":
Da es bei HTTP kein "Login" gibt, auch wenn das immer so genannt wird, kann es auch kein "Logout" geben. Es gibt nur eine Authentifizierung. Um innerhalb einer Session entscheiden zu können, ob der User zu gewissen Handlungen berechtigt ist, erhält er einen Key. Dieser sollte nur eine bestimmte Lebensdauer haben. Die Lebensdauer ist durch erneute Handlungen nachtriggerbar.
HTTP ist aber als verbindungs- und zustandsloses Protokoll gebaut und so kann man zwischen den Requests nicht wissen, ob der User noch vor dem Client lauert.
Die meisten Systeme verzichten sogar auf die Nachtriggerung des Keys, und verlassen sich einfach auf die automatische Nachtriggerung der Session. Da der Key meistens in der Sessiondatei eingetragen wird, verfällt der Key automatisch mit, wenn die Session endet und die Datei gelöscht wird. Das ist aber nicht unbedingt die richtige Vorgehensweise.
Wenn Du nun die Gültigkeit des Keys bei jedem Besuch (jedem Click) über Deine Datenbank überprüfst, kannst Du dort auch den letzen "Clickzeitpunkt" eintragen. Wenn die Zeit vom vorigen zum nächsten zu lang wird (das bestimmst dann Du), wird der Schlüssel ungültig und der User ist automatisch "ausgeloggt" Diesen Zeitpunkt kannst Du Dir dann in Deiner Statistiktabelle merken.
Da der Schlüsselverfall irgendwann zwischen dem letzten gültigen Klick und dem ersten ungüligen gelegen hat (nämlich t1 + dt, dt ist die von Dir festgelegte Nachtriggerzeit), kannst Du Dir überlegen, ob Du diesen Zeitpunkt als "Logout"-Zeitpunkt nehmen willst.
Wenn der User sich gezielt abmeldet, indem er in einem Request darum bittet, hast Du den Zeitpunkt exakt.
Zu überlegen ist nun noch die dritte Möglichkeit: Er hört einfach auf zu surfen und lässt seinen Schlüssel verfallen. Wie willst Du das feststellen? Du müsstest Dir also Deine "Logintabelle" in der Datenbank alle paar Minuten nach verfallenen Schlüsseln durchsehen, diese Datensätze dann in Deine Statistik übertragen und den Satz als verarbeitet markieren. Wenn der User sich wieder anmeldet, wird die Markierung wieder entfernt, usw.
Oder aber Du verzichtest einfach eine Weile auf den letzten Datensatz in Deiner Statistik und lässt ihn erzeugen, wenn der User sich das nächste Mal wieder anmeldet. Der "Lastclick" steht ja noch drin in der Tabelle und bevor der dann durch den aktuellen timestamp ausgetauscht wird, kannst Du ihn übertragen.
Ich hoffe, die Überlegungen helfen Dir ein bisschen weiter.
Liebe Grüße
Tom vom Berg
Nur selber lernen macht schlau