Login Status verwalten

TriloByte

Mitglied
Da ich hier noch kein wirklich passendes Thema gefunden habe, hier mein Problem:

Ich habe ein Loginsystem, wo sich jeder registrierte Benutzer einloggen kann. (wow :-) )Geschieht das, wird seine Session-id und IpAddresse in einer Mysql - Tabelle 'User' eingetragen. Klickt er auf logout, werden seine Session-id und ip aus der entsprechenden Zeile gelöscht. Soweit so gut. Das Problem ist, wenn er nicht auf Logout klickt, dann bleiben ip und Session-id eingetragen und das ist schlecht.

Als Lösung könnte man natürlich zusätzlich eine Spalte für den Timestamp anlegen, so dass dieser bei jedem Seitenaufruf in der Datenbank aktualisiert wird. Nur weiß ich nicht, wie ich sinnvoll überprüfe, ob ein Timestamp schon länger als x Minuten in der Datenbank schlummert.

Ich würde mich freuen, wenn ihr Stellung zu meiner Lösung nehmt, vielleicht ist sie ja auch schlecht und man könnte das Problem viel sinnvoller angehen.

Danke fürs lesen.
TriloByte
 
Im Prinzip ist dein Problem das gleiche, als wenn du dir selbst ein Sessionhandling bauen würdest. Nämlich das Garbage Collecten. Was mache ich wenn der User nicht auf Logout klickt und die Einträge in der DB stehen.
Daher eher die andere Frage, wozu brauchst du denn die Einträge in der Tabelle bzw. was willst du denn damit bezwecken?

Ansonsten speichere einrfach den Timestamp und führe bei jedem Scriptaufruf, z.B. von der Funktion logout einfach ein DELETE * FROM ... aus wo der aktuelle Timestamp - dem geppeicherten grösser als 1 Tag oder 1 Stunde oder wie auch immer ist....
 
Original geschrieben von TriloByte
Als Lösung könnte man natürlich zusätzlich eine Spalte für den Timestamp anlegen, so dass dieser bei jedem Seitenaufruf in der Datenbank aktualisiert wird. Nur weiß ich nicht, wie ich sinnvoll überprüfe, ob ein Timestamp schon länger als x Minuten in der Datenbank schlummert.

Ich würde mich freuen, wenn ihr Stellung zu meiner Lösung nehmt, vielleicht ist sie ja auch schlecht und man könnte das Problem viel sinnvoller angehen.
Nein, ist schon eine gute Idee.

Um zu wissen wie man jetzt alte Einträge abfragen kann, empfehle ich dir das mySQL Online-Handbuch, Abschnitt Date and Time Functions. Zu finden hier: http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html . Insbesondere die Funktion SUBDATE() ist hierbei ganz hilfreich :)
 
Zurück