Frost: Online Status?

Hi,
Weis jemand wie man einen Online Status programmieren kann?
Also das man z.B. mit Java Script oder womit das möglich ist überprüft ob der user eingelöggt ist und damit online ist...
Das problem ist, wie setzt man den Status auf offline (in einer mysql Datenbank) wenn der user das fenster schließt...

Cya
Frost

  1. Hallo,

    Weis jemand wie man einen Online Status programmieren kann?

    Gar nicht. Ich habe dazu mal einen Artikel geschrieben, der zwar scheinbar nicht direkt Dein Problem behandelt; Deines fällt jedoch auch irgendwie darunter: http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index.htm

    Also das man z.B. mit Java Script oder womit das möglich ist überprüft ob der user eingelöggt ist und damit online ist...

    Das geht nicht.

    Das problem ist, wie setzt man den Status auf offline (in einer mysql Datenbank) wenn der user das fenster schließt...

    Gar nicht. Das einzige, was Du machen kannst, ist ein Timeout: wenn der Benutzer nach dieser und dieser Zeit (z.B. 15 Minuten) nicht mehr auf Deinen Server zugegriffen hat, dann gilt er als ausgeloggt.

    Viele Grüße,
    Christian

    1. Hmm
      hab mir das gerade nochmal durch den Kopf gehen lassen...
      Da es ja auch die möglihckeit gibt per JS popup Fenster beim schließen eines Fensters zu erzeugen müsste sich dadurch doch eigentlihc auch der Status neu setzten lassen. Auf die mysql Datenbank kann man ja per js zugreifen...

      Frost

      1. Hallo Frost,

        Da es ja auch die möglihckeit gibt per JS popup Fenster beim schließen eines Fensters zu erzeugen müsste sich dadurch doch eigentlihc auch der Status neu setzten lassen.

        Wie willst Du das schließen eines Popups zuverlässig abfangen? Wenn Du das schaffst, hast Du schonmal die halbe Miete.

        Auf die mysql Datenbank kann man ja per js zugreifen...

        Das wage ich allerdings zu bezweifeln. Wenn Du mit clientseitigem JavaScript auf die MySQL-Datenbank zugreifen kannst, dann hast Du ein riesiges Sicherheitsloch.

        Viele Grüße,
        Christian

        1. Wie willst Du das schließen eines Popups zuverlässig abfangen? Wenn Du das schaffst, hast Du schonmal die halbe Miete.

          Nicht das schließen eines popups das schließen des Fensters muss abgefangen werden.
          Ich hab jetzt keine Ahnung von Java script aber gibt es da nicht ein event das ausgelöst wird wenn das fenster geschlossen wird?

          Naja aber wie ich das so sehe ist deine Methode mit dem Timeout die beste... Ständiges neuladen ist ja irgendwie sinnlos. Erstmal der Traffic und 2. das der user dauernt reloads hat ist auch mist.

          Auf jeden Fall erstmal danke für die Hilfe..
          Vileiecht hat ja noch jemand ne Idee...
          Cya
          Frost

          1. Hallo Frost,

            Ich hab jetzt keine Ahnung von Java script aber gibt es da nicht ein event das ausgelöst wird wenn das fenster geschlossen wird?

            Beim Verlassen der Seite wird onunload ausgeführt - das passiert allerdings auch beim Klicken auf einen Link oder beim Abschicken eines Formulars.

            Viele Grüße,
            Christian

    2. Gar nicht. Das einzige, was Du machen kannst, ist ein Timeout: wenn der Benutzer nach dieser und dieser Zeit (z.B. 15 Minuten) nicht mehr auf Deinen Server zugegriffen hat, dann gilt er als ausgeloggt.

      Hm, es gibt eine Möglichkeit das Zeitfenster zu verkleinern indem du ein "blindes" Frame nimmst in welchem nach z.B. 30 Sekunden eine Seite automatisch geladen wird und der Status des Benutzers dann entsprechend geupdatet wird. Ist zwar relativ unschön, funktioniert aber gut ;)

    3. Hi,

      Weis jemand wie man einen Online Status programmieren kann?

      Gar nicht.

      was ist mit der Fehlerbehandlung, wenn ein im "Web" liegendes "img" nicht geladen werden kann? - Warum waere diese Loesung nicht OK?

      Gruss,
      Lude

      1. Hallo Lude,

        was ist mit der Fehlerbehandlung, wenn ein im "Web" liegendes "img" nicht geladen werden kann? - Warum waere diese Loesung nicht OK?

        Inwiefern? Damit könnte höchstens der Server dem Client noch mitteilen, dass er noch verfügbar ist; der Fragesteller will es aber umgekehrt.

        Wenn ich Dich falsch verstanden haben sollte, dann erläutere bitte etwas genauer, was Du meinst.

        Viele Grüße,
        Christian

        1. Hallo, Christian,

          was ist mit der Fehlerbehandlung, wenn ein im "Web" liegendes "img" nicht geladen werden kann? - Warum waere diese Loesung nicht OK?

          Inwiefern? Damit könnte höchstens der Server dem Client noch mitteilen, dass er noch verfügbar ist; der Fragesteller will es aber umgekehrt.

          Wenn ich Dich falsch verstanden haben sollte, dann erläutere bitte etwas genauer, was Du meinst.

          es gibt da die clientseitig laufende Fehlerbehandlung, die Javascript-Code ausloest, wenn eine "Bildressource" nicht geladen werden kann. Stichwort: "<img>"

          Irgendein Event wie "OnError" oder so, ich habe es erfolgreich getestet, als ich hier noch jung war.

          Gruss,
          Lude

          1. Hallo Lude,

            Irgendein Event wie "OnError" oder so,

            Ja, onerror gibt es. Genau darauf bezog ich mich auch: Es geht ja nicht darum, dass der Client weiß, dass er noch online ist, es geht darum, dass der Server weiß, dass der Client noch online ist. Und das lässt sich damit nicht realisieren.

            Viele Grüße,
            Christian

            1. Hi,

              Ja, onerror gibt es. Genau darauf bezog ich mich auch: Es geht ja nicht darum, dass der Client weiß, dass er noch online ist, es geht darum, dass der Server weiß, dass der Client noch online ist. Und das lässt sich damit nicht realisieren.

              da hatte ich nicht richtig aufgepasst. - Das "onUnload"-Ereignis (oder so aehnlich) macht auch nicht happy.

              Man kriegt nur "komische Teilloesungen". Allerdings ist das Sitzungskonzept, was ja allgemein anerkannt ist, auch letztendlich nichts anderes als das "Users Online".

              Oder mach' ich mich da wieder unbeliebt?   ;-)

              Gruss,
              Lude

              1. Hallo Lude,

                Man kriegt nur "komische Teilloesungen". Allerdings ist das Sitzungskonzept, was ja allgemein anerkannt ist, auch letztendlich nichts anderes als das "Users Online".

                Jain. Bei Sitzungen geht es lediglich um die Identifikation des Benutzers - und das funktioniert eigentlich ganz gut. Beim "Users Online" geht es um einiges mehr. (-> mein Artikel, Lösungsvorschlag 2)

                Oder mach' ich mich da wieder unbeliebt?   ;-)

                Warum denn?

                Viele Grüße,
                Christian

                1. Hi,

                  Man kriegt nur "komische Teilloesungen". Allerdings ist das Sitzungskonzept, was ja allgemein anerkannt ist, auch letztendlich nichts anderes als das "Users Online".

                  Jain. Bei Sitzungen geht es lediglich um die Identifikation des Benutzers - und das funktioniert eigentlich ganz gut. Beim "Users Online" geht es um einiges mehr. (-> mein Artikel, Lösungsvorschlag 2)

                  eine Sitzung wird "logisch" gefuehrt. Man kann, und ich habe das schon getan, Sitzungen fuehren ohne Nutzeridentifikation, also ohne Sicherheit(skontext). - Sitzungen timen immer auch aus. - Bei "Users Online" geht es m.E. um _genau dasselbe_. Man muss die Information "Users Online" eben mit Vorsicht geniessen.

                  Wenn man die Sitzungsgeschichte um Identifikation / Sicherheit erweitert, dann haette man analog dazu das "Friends Online" - mit denselben Einschraenkungen beim Genuss.

                  Gruss,
                  Lude

                  1. Hallo Lude,

                    eine Sitzung wird "logisch" gefuehrt. Man kann, und ich habe das schon getan, Sitzungen fuehren ohne Nutzeridentifikation,

                    Nein. Eine Sitzung identifiziert _immer_ einen Nutzer. Auch wenn das einzige, was zum Nutzer gespeichert wird, die Session-ID selbst ist.

                    also ohne Sicherheit

                    Identifikation bedeutet nicht zwangsläufig Sicherheit.

                    Sitzungen timen immer auch aus.

                    Nicht zwangsläufig. Aus Sicherheitsgründen sollten sie.

                    • Bei "Users Online" geht es m.E. um _genau dasselbe_.

                    Nein. "Users Online" beinhaltet mehr: es geht um a) die eineindeutige Identifikation des Benutzers (nicht nur eindeutig, sondern wirklich eineindeutig!) und um b) den Status des Benutzers, _nachdem_ der HTTP-Request abgeschlossen ist.

                    Man muss die Information "Users Online" eben mit Vorsicht geniessen.

                    ACK.

                    Wenn man die Sitzungsgeschichte um Identifikation / Sicherheit erweitert, dann haette man analog dazu das "Friends Online" - mit denselben Einschraenkungen beim Genuss.

                    Nicht ganz. Bei "Friends Online" fehlt ja immer noch der Status des Benutzers.

                    Viele Grüße,
                    Christian

                    1. Hi,

                      ich beschraenke mich auf das Wesentliche:

                      • Bei "Users Online" geht es m.E. um _genau dasselbe_.

                      Nein. "Users Online" beinhaltet mehr: es geht um a) die eineindeutige Identifikation des Benutzers (nicht nur eindeutig, sondern wirklich eineindeutig!) und um b) den Status des Benutzers, _nachdem_ der HTTP-Request abgeschlossen ist.

                      das einzige, was "Users Online" leisten kann, ist anzuzeigen, wieviele nichtausgetimte Sitzungen (wie Du sagst mit identifizierten Nutzern; ich wuerde von unauthentifizierten Sitzungen sprechen) gerade existieren. - Ich denke, dass man das "Users Online" nennen darf (unter den bekannten Vorbehalten)

                      btw - Vergessen wir den "Status des Benutzers" nach seinem http-Request?

                      Gruss,
                      Lude

                      PS: "eineindeutig" ist mir in seiner Bedeutung nicht verfuegbar.

                      1. Hallo Lude,

                        das einzige, was "Users Online" leisten kann, ist anzuzeigen, wieviele nichtausgetimte Sitzungen (wie Du sagst mit identifizierten Nutzern; ich wuerde von unauthentifizierten Sitzungen sprechen) gerade existieren. - Ich denke, dass man das "Users Online" nennen darf (unter den bekannten Vorbehalten)

                        Ja, wie gesagt, das kommt einigermaßen nahe ran.

                        btw - Vergessen wir den "Status des Benutzers" nach seinem http-Request?

                        Jain, eine User-Online-Anzeige _will_ das leisten, _kann_ es aber nicht. :-)

                        PS: "eineindeutig" ist mir in seiner Bedeutung nicht verfuegbar.

                        Das ist ein mathematischer Begriff. Eine Funktion ist immer eine eindeutige Zuordnung, d.h. jedem x-Wert wird genau ein y-Wert zugewiesen. Eine Funktion kann aber auch zusätzlich eine eineindeutige Zuordnung sein, d.h. jedem x-Wert wird genau ein y-Wert zugewiesen *und umgekehrt*. Genauso ist es bei den Sessions und der Besucher-Online-Anzeige:

                        Sessions dienen dazu, einen Benutzer eindeutig zu identifizieren. Also soll sichergestellt werden, dass es der gleiche Benutzer ist, der über verschiedene Anfragen hinweg auf die Applikation zugreift. Ein Benutzer kann jedoch immer noch _mehrere_ Session öffnen.

                        Die Besucher-Online-Anzeige braucht (bekommt aber nicht) eine eineindeutige Zuordnung. Es muss nicht nur sichergestellt werden, dass es jeweils nur ein und derselbe Nutzer ist, der hintereinander auf die Applikation zugreift, es muss desweiteren noch sichergestellt sein, dass für jeden Nutzer nur ein Informationshäppchen (falls dies mit Sessions realisiert wird: aktive Session) vorhanden ist.

                        Oder anders ausgedrückt: Bei Sessions an sich wird jeder Session ein Besucher eindeutig zugeordnet. Bei der User-Online-Anzeige wird _zusätzlich_ versucht, jedem Besucher eindeutig eine Session zuzuordnen. Daher eineindeutig.

                        Ich hoffe, das ist jetzt verständlicher.

                        Viele Grüße,
                        Christian

                        1. Hallo, Christian,

                          allerbesten Dank fuer Deine Ausfuehrungen.

                          PS: "eineindeutig" ist mir in seiner Bedeutung nicht verfuegbar.

                          Das ist ein mathematischer Begriff. Eine Funktion ist immer eine eindeutige Zuordnung, d.h. jedem x-Wert wird genau ein y-Wert zugewiesen.

                          ich kenne das als "1:n"-, bzw. "n:m"-Beziehung. 'Eineindeutig' hoert sich allerdings eher besser an und wird nach erfolgter Validierung meinem aktiven Vokabular sicherlich bald zugeordnet.   ;-)

                          Gruss,
                          Lude

                          1. Hallo Lude,

                            ich kenne das als "1:n"-, bzw. "n:m"-Beziehung.

                            Nicht ganz: eindeutig = 1:n, eineindeutig = 1:1

                            'Eineindeutig' hoert sich allerdings eher besser an und wird nach erfolgter Validierung meinem aktiven Vokabular sicherlich bald zugeordnet.   ;-)

                            *g*

                            Viele Grüße,
                            Christian