(django) Anzahl der aktiven Benutzer zählen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

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
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Naja aber ich kann 234235 verschiedene Sessions eröffnen und somit das Ergebnis fälschen.
metty
User
Beiträge: 99
Registriert: Samstag 13. Dezember 2008, 19:30

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.
Antworten