Seite 1 von 1

(django) Anzahl der aktiven Benutzer zählen

Verfasst: Montag 16. Februar 2009, 11:40
von metty
Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit die Benutzer, die aktuell an django angemeldet bzw. aktiv sind, zu zählen. Mit angemeldet meine ich aber nicht die Gesamtanzahl an Benutzern, sondern nur die, die gerade mit der Website "arbeiten" und angemeldet sind.

Ich möchte das ganze verwenden um anzugeben, wieviele Benutzer im Moment gerade online sind.


Was mir auf die schnelle einfällt wäre, dass beim Anmeldevorgang eine Nutzerzahl in der DB um eins erhöht wird und beim ausloggen um eins vermindert. Aber das ist in meinen Augen ein eher unschöner weg.

Vielleicht wisst ihr ja was...
Vielen Dank schon mal im vorraus.

Freundliche Grüße

Verfasst: Montag 16. Februar 2009, 11:52
von sma
Du könntest die Anzahl der Session-Objekte, die noch nicht abgelaufen sind, zählen. Ungefähr so:

Code: Alles auswählen

from django.contrib.sessions.models import Session
Session.objects.filter(expire_date__gt=...).count()
Stefan

Verfasst: Montag 16. Februar 2009, 11:52
von Leonidas
Formal gesehen geht sowas nicht, weil HTTP verbindungslos ist und eine Webseite somit mehr oder weniger 0 User hat, die online sind. Somit musst du zu anderen Tricks greifen.

Persönlich würde ich für so etwas eine Middleware benutzen, die eine Tabelle hat mit Usern und die datetime ihres letzten Zugriffs auf die Applikation. Wenn die Datetime älter als 15 Minuten ist, wird der User aus der Tabelle gelöscht (also "offline") ansonsten wird bei jedem Request vom User die Datetime auf die aktuelle Zeit gesetzt.

Verfasst: Montag 16. Februar 2009, 12:26
von metty
sma hat geschrieben:Du könntest die Anzahl der Session-Objekte, die noch nicht abgelaufen sind, zählen. Ungefähr so:

Code: Alles auswählen

from django.contrib.sessions.models import Session
Session.objects.filter(expire_date__gt=...).count()
Stefan

An das mit den Sessions habe ich auch schon gedacht, es scheint mir der etwas "elegantere" Weg zu sein.

Leonidas hat geschrieben: Formal gesehen geht sowas nicht, weil HTTP verbindungslos ist und eine Webseite somit mehr oder weniger 0 User hat, die online sind. Somit musst du zu anderen Tricks greifen.
Stimmt, wenn man es wörtlich nimmt geht sowas eigentlich nicht. :wink:
Aber es geht mir eher darum die "Standarduser" zufrieden zu stellen. :D

Verfasst: Montag 16. Februar 2009, 16:15
von Dauerbaustelle
Naja aber ich kann 234235 verschiedene Sessions eröffnen und somit das Ergebnis fälschen.

Verfasst: Montag 16. Februar 2009, 19:30
von metty
Ich habe hier einen weiteren Ansatz gefunden...
http://www.djangosnippets.org/snippets/947/

Ist zwar nicht genau, aber lässt zumindest einen schluss zu, wieviele Leute vor 1 h eingeloggt waren. Länger dürfte die Nutzungsphase einer Webapplikation, auch wenn diese kommerziell ist, nicht sein.