Hiho!
ich Frage mich jetzt schon seit längerem wie ich eine "Wer ist online?" Anzeige realisiere...
Gibt es eine Möglichkeit, dies aus der Datenbank abzufragen?
Ansonsten würde ich es so realisieren, dass nach jeder Aktivität ein Timestamp zum User in die Datenbank geschrieben wird. Hat der User seit 120 Sekunden keine Aktivität, gilt er als "offline".
Wie könnte man es sonst noch realisieren?
Anzeige: Wer ist online?
gepostet vor 17 Jahre, 1 Monat von azamaroth
gepostet vor 17 Jahre, 1 Monat von raufaser
Ich hab's bei mir im Session Management. Die Sessions werden in der Datenbank abgelegt und bei jeder Aktion durch den User wird der Timestamp der Session auf die aktuelle Zeit gesetzt. Dann kannst du per SQL recht leicht rausfinden, wer online ist.
Beispiel:
SELECT player.name FROM session JOIN player ON session.uid=player.uid WHERE UNIX_TIMESTAMP( session.timestamp )>(UNIX_TIMESTAMP( NOW() ) - 300);
Würde bei mir die aktiven User der letzten 5 Minuten liefern.
Gruß,
Marc
Beispiel:
SELECT player.name FROM session JOIN player ON session.uid=player.uid WHERE UNIX_TIMESTAMP( session.timestamp )>(UNIX_TIMESTAMP( NOW() ) - 300);
Würde bei mir die aktiven User der letzten 5 Minuten liefern.
Gruß,
Marc
gepostet vor 17 Jahre, 1 Monat von Nightflyer
@raufaser: Es äbe da noch mysql-Datum- und Zeitfunktionen, damit musst du nicht deine schönen Zeitdaten in Timestamps umrechnen...
gepostet vor 17 Jahre, 1 Monat von TheUndeadable
>Es äbe da noch mysql-Datum- und Zeitfunktionen, damit musst du nicht deine schönen Zeitdaten in Timestamps umrechnen...
Warum man immer mit dem Timestamp-Geseuche herumrechnet ist für mich so oder so ein Rätsel...
Aber prinzipiell würde ich es so machen wie raufaser.
DLINQ:
var aoUsers = from user in usertable where user.lastaction
spanUsersOnline.Text = String.Join ( aoUsers, ", " );
Warum man immer mit dem Timestamp-Geseuche herumrechnet ist für mich so oder so ein Rätsel...
Aber prinzipiell würde ich es so machen wie raufaser.
DLINQ:
var aoUsers = from user in usertable where user.lastaction
spanUsersOnline.Text = String.Join ( aoUsers, ", " );
gepostet vor 17 Jahre, 1 Monat von raufaser
Original von Nightflyer
@raufaser: Es äbe da noch mysql-Datum- und Zeitfunktionen, damit musst du nicht deine schönen Zeitdaten in Timestamps umrechnen...
Hm, keine Ahnung, ich find's so einfacher und sehe da jetzt auch nicht wirklich ein Problem.
gepostet vor 17 Jahre, 1 Monat von Nuky
Ich find die timestamp - variante auch intuitiv und einfach.. und seh garkein Problem damit ^^
Perfomanter gehts ja wohl auch nicht.. und das is meist mein Hauptziel.
Perfomanter gehts ja wohl auch nicht.. und das is meist mein Hauptziel.
gepostet vor 17 Jahre, 1 Monat von Amun Ra
Warum schnappst du dir nicht irgendeine Forensoftware
und schaust wie die es gelöst haben ?
und schaust wie die es gelöst haben ?
gepostet vor 17 Jahre, 1 Monat von shadows
Oh, wie ich doch nur .NET liebe.
In der Gobal.asax:
Sub Session_OnStart()
Application.Lock
Application("ConcurrentUsers") = Application("ConcurrentUsers") + 1
Application.Unlock
End Sub
Sub Session_OnEnd()
Application.Lock
Application("ConcurrentUsers") = Application("ConcurrentUsers") - 1
Application.Unlock
End Sub
In der Gobal.asax:
Sub Session_OnStart()
Application.Lock
Application("ConcurrentUsers") = Application("ConcurrentUsers") + 1
Application.Unlock
End Sub
Sub Session_OnEnd()
Application.Lock
Application("ConcurrentUsers") = Application("ConcurrentUsers") - 1
Application.Unlock
End Sub
gepostet vor 17 Jahre, 1 Monat von Kampfhoernchen
Session-Heap-Tabelle ->
SELECT * FROM sessions WHERE last_action > UNIX_TIMESTAMP() - (60*5)
Sollte ja selbsterklärend sein.
SELECT * FROM sessions WHERE last_action > UNIX_TIMESTAMP() - (60*5)
Sollte ja selbsterklärend sein.