• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

user tracking

riddler

New member
habe ein problem:
auf der Startseite (B) soll angezeigt werden,
wieviele User in der Community (A) online sind.

Dazu wollte ich eine globale Var. nehmen und diese auf B auslesen.
Dazu müßte diese globale Var. beim betreten von A um eins erhöht werden. soweit so gut!
Natürlich muß diese aber auch beim verlassen von A um eins vermindert werden. und da liegt mein problem!

Wie soll ich das machen?
Habe mir dazu mehrere Gedanken gemacht:

1) irgendwie mit hilfe einer session
Da beim betreten der community die Session("community") für den jeweiligen user gesetzt wird und diese beim logout bzw. (falls wer die community verläßt ohne sich auszuloggen) beim timeout wieder gelöscht wird, dachte ich es wäre ungemein praktisch das erhöhen/vermindern der globalen Var, an diese Session zu verknüpfen.
ungefähr so:
eine neue Session("community") wird gesetzt -> globale Var +1
eine neue Session("community") läuft aus -> globale Var -1
nur weiß ich nicht ob das überhaupt möglich ist, wenn ja wo (evtl. global.asa??) und wie??!?!

2) mittels onUnload
jemand betritt A -> die globale Var wird erhöht
jemand verläßt A -> onUnload tritt in Aktion
Da ich aber meines wissens mit onUnload (clientseitig) nicht die globale Var ändern kann (serverseitig) müßte man mit onUnload zu einer weiteren Seite weiterleiten, diese vermindert die globale Var. und leitet dann zu der eigentlich gewünschten Seite weiter, wobei diese Adresse also mitgeliefert werden müßte (etwa als QueryString).
Da weiß ich jetzt nicht, ob das mit dem weitergeben der eigentlich gewünschten seite immer (auf link klicken/neue adresse angeben/einen favoriten auswählen/...) klappen würde.
Außerdem ist es auch unpraktisch, da A eigentlich aus 2 seiten besteht...

das ganze macht mich irgendwie fertig :(
hoffe irgendwer kann mir bei meinen theorien helfen oder hat bessere...
ich mein grundsätzlich muß doch so ein usertracking gehen, hab ich doch schon auf anderen sites gesehen...

mfg, riddler
ps: ist natürlich alles mal wieder asp
aber vielleicht könne ja die phpler
in den grundsätzlichen dingen auch helfen...
pps: hier gibts das doch auch:
das currently active users
sowas bräucht ich.
wie funktioniert das?
 
Zuletzt bearbeitet:
Beim VB wird das über eine Datenbank gelöst.

Vorschlag: Nimm einfach ein File in dem du die notwendigen Daten reinschreibst und löscht wenn du keine DB zur Verfügung hast.

Vielleicht ist das ja für's erste Ansatz genug. Über eine DB wäre das aber bei weitem einfach zu lösen....
 
natürlich hab ich ne DB, aber wie soll die das ganze vereinfachen?

da muß ich doch genauso den moment herausfinden,
indem der user die community verläßt (ob durch logout oder einfach so) um ihn dann aus der db zu nehmen...

versteh nicht so genau wie mir das jetzt helfen soll?
:( riddler
 
also ich würde sagen, daß Du das am besten mit Sessions lösen kannst....

mo hat ja einen ähnlichen Mechanismus für die jswelt.... dabei werden nicht nur die eingeloggten Benutzer, sondern auch ihre zuletzt registrierte Operation (+Uhrzeit) angezeigt....

Die Szenarien laufen dabei wie folgt ab:
  1. Gast
    - Gäste sind alle anonymen Besucher
    - Jeder Besucher ist zunächst Gast
    entweder
    - Gast loggt sich ein -> wird zu Benutzer (siehe 2)
    oder
    - Gast surft weiter und schließt den Browser irgendwann
    -> Sitzung läuft in Timeout
  2. Benutzer
    - surft auf den Seiten herum
    entweder
    - meldet sich ab
    -> Sitzung wird explizit geschlossen -> neue Sitzung als Gast wird gestartet (siehe 1)
    oder
    - Benutzer schließt den Browser
    -> Timeout
    [/list=1]

    Beim expliziten Schliessen einer Sitzung (Abmelden) hast Du denke ich keine Probleme entsprechende Skripts ablaufen zu lassen, Du weißt ja wann es passiert.
    Schwieriger wird das implizite Schliessen (Timeout). Bei jswelt erfolgt dies nach 15 Minuten. Meist geschieht dies durch das Framework automatisch (keine Ahnung wie das bei VB läuft)

    Die beste Lösung für beide Arten wäre das Subclassen des Session Objektes, d.h. dem Server wird ein eigenes Session Objekt untergejubelt. Dieses wird mit entsprechenden Constructor und Destructor Routinen (onLoad und onUnload oder so) ausgestattet, das Problem ist so gut wie erledigt.

    Sollte dies nicht möglich sein, dann solltest Du schauen, ob Du irgendwie mitbekommen kannst, daß ein Session Objekt zwecks Timeout gekillt werden soll (denn das ist der einzigste Punkt, den man nicht steuern kann. Schließlich passiert das irgendwann bei einem Request, der weit außerhalb des exakten Timeoutfensters liegen kann.)

    vielleicht kann der mo ja auch noch mal was zu seinem User tracking sagen... :)
 
ja, um genau dieses "implizierte schließen" durch timeout geht es mir!

wie "merke" ich/der server das und kann darauf reagieren, sprich den user nicht mehr als online anzeigen

leider versteh ich nicht genau was du mit dem "Subclassen des Session Objektes" meinst... :(
aber wenn das die lösung für das problem wäre, wäre das ja nicht schlecht..

mfg, riddler
 
Subclassen ist der Vorgang, wenn Du eine vorhandene Klasse ableitest und dem System Deine abgeleitet Version als einzig Wahre unterjubelst.... (oder so :) )

Keine Ahnung ob VB das erlaubt, man kann da zwar irgendwie objektorientiert programmieren, aber damit ist es auch nicht so weit her.....

leider spinnt meine MSDN DVD immer noch (bzw. das DVD Laufwerk mag nich mehr.....) also kann ich da nicht mal schnell nachschauen, obs da ein Beispiel gibbet....
 
Beim VB sind die User nach verlassen noch x Minuten in der DB gespeichert. Jede aktion wird sozusagen in der Sessin DB protokolliert und gleichzeitig wird geprüft, ob es eine Session gibt, die länger als x Minuten nicht aktualisiert wurde, diese wird dann wieder entfernt aus der DB.

Es gibt dafür auch frei verfügbare Lösungen auf der Basis von PHP+MySQL, vielleicht schaust Du Dir diese einfach mal an und probierst, es in ASP umzusetzen, oder findest gar etwas in ASP, was du Dir anpassen kannst

-> http://www.hotscripts.com/Detailed/13586.html
 
mh... hab da grad so ne wirre idee:

auf den community seiten mach ich nen algorithmus,
der bei jedem aufruf der seite folgendes macht:

schaue in der DB ob es einen Datensatz gibt für den user Session("community")

falls nein:
1)lege einen datensatz an mit den werten
user = Session("community")
lastdate = Datum
lasttime = Zeit
2) lösche alle datensätze mit lastdate <> Datum
lösche alle datensätze mit lasttime < Zeit - Timeout (zB 5 Minuten)

falls ja:
1)aktualisiere lastdate und lasttime
2) lösche alle datensätze mit lastdate <> Datum
lösche alle datensätze mit lasttime < Zeit - Timeout (zB 5 Minuten)


Auf der Seite wo die Anzahl der user angezeigt werden soll mach ich dann:
1) Öffne die DB
2) lösche alle datensätze mit lastdate <> Datum
lösche alle datensätze mit lasttime < Zeit - Timeout (zB 5 Minuten)
3) Gebe Anzahl und/oder Namen der User an (das müßten dann alle sein, die online sind.)

das müßte doch funktionieren oder?
was haltet ihr davon?
verbesserungsvorschläge?
fehler gefunden?

mfg, riddler
 
also prinzipiell sieht das korrekt aus....
ob es allerdings eine bessere Lösung gibt, das kann nur ein ASP Experte sagen..... (hab grad mal mein Visual Interdev gestartet, aber da ich ned weiß, wie man damit entwickelt, hab ichs wieder zu gemacht ;) )
 
Zurück
Oben