Christopher: Onlinestatus von Gästen erfassen [Sessions]

Hi,

ich frage mich derzeit, wie feststellen kann, wenn Leute meine Seite >verlassen<. Ich weiß eine Session zu starten und damit umzugehen, aber wie fasse ich es auf, wenn Leute die Seite wieder verlassen bzw. die Session beenden. Mein Ziel ist es nämlich, eine Angabe der temporären Gäste auszugeben und wenn ich die Daten nicht mehr aus der DB bekomme, wird es wohl irgendwann unwahrscheinlich ;-)

Danke für euren Rat!

  1. Hallo,

    wenn ein User sich bei mir ausloggt dann mache ich das so:

    if(isset($_SESSION['rights']))
    {
    $sql = "DELETE FROM
        USer_meiner_Seite_online
       WHERE
        benutzername = '".$_SESSION['benutzername']."'
       ";
    mysql_query($sql) or die(mysql_error());
    }
    //Session Daten löschen
    $_SESSION = array();
    ?>

    Gruß jaylibII

    1. Ich danke euch allen drei vorerst!

      wenn ein User sich bei mir ausloggt dann mache ich das so:

      danke auch dir, jaylibII, aber ich glaube, es ist dir nicht ganz klar geworden, dass ich mich frage, wie ich den Onlinestatus von Usern festhalte, die sich nicht registriert haben. Mir fehlt das Ereignis, eine Überprüfung zu stellen.

      Der Server merkt nicht irgendworan, dass ein User die Seite verlässt bzw. lässt das überprüfen, oder? Ggf. beschränke ich mich eben wirklich nur darauf, anzuzeigen, wer eingeloggt ist. Aber dann gilt ja schon wieder: Wer sich nicht gezielt ausloggt, bleibt als eingeloggt angegeben.

      Wie könnte ich denn alle 10min eine Überprüfung ansetzen?

      1. Moin Christopher,

        Ich habe eigentlich nur einen Link für Dich :-)
        http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index.htm

        Stammt vom Christian Seiler, der sehr umfassend die Thematik erleutert hat.

        Vioele Grüße aus Berlin

        ToMIRL

        1. Vielen, vielen Dank! Werde mich bald ransetzen.

          Liebe Grüße,
          Christopher

      2. Hello,

        Du kannst ohne die formale Anmeldung immer noch mit "Session-Cookies" arbeiten. Da fallen dann natürlich alle Besucher durch, die keine Cookies akzeptieren. Das sollte aber heute (bis auf Spezialseiten, auf denen nur "Freaks" verkehren) weniger als 2% der User betreffen.

        Beispiel für MySQL in Pseudocode:
        Bei jedem Besuch mit dem Cookie wird der entsprechende Session-Datensatz im Feld "LASTCLICK" aktualisiert. Dies kann mit einem einfachen

        Update LOGDATA
          set CLICKCOUNT = CLICKCOUNT + 1
          where SESSIONID = mysql_escape_string($_COOKIE[$sessionname]

        passieren. Die Spalte "LASTCLICK" ist dabei die erste Timestamp-Spalte in der Tabelle und dadurch automatisch geführt. Allerdings muss der Datensatz vorhanden sein. Ein echtes Log zu führen, wäre sicher übertriebene Redundanz, denn der Apache führt ja schon ein Log.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. Hallo,

    ich frage mich derzeit, wie feststellen kann, wenn Leute meine Seite >verlassen<.

    imo schlicht unmöglich.
    Die Vorgehensweise ist dass du mit jedem klick eine Log-Zeile schreibst, die in der "Who´s online" ausgewertet wird.
    Um zu sehen ob sich die Logdatei geändert hat musst du in regelmäßigen Abständen nachfragen, z.B. 5 Minute
    Außerdem musst du in regelmäßigen Abständen die Sessions checken, z.B. alle 15 Minuten.
    Jetzt hast du eine Statistik die aussagt, wer in den letzten 15 Minuten wo war. je kürzer du diese Zeit machst, desto mehr wird die Performance darunter leiden. Was macht es auch für einen Sinn? Du weisst ja nicht mal ob der User die angegebene Seite ansieht, oder ob er auf dem Klo Zeitung liest.

    Solche Statistiken sind immer mit vorsicht zu genießen und geben nur Anhaltswerte.

    Gruß Andreas

  3. Hello,

    das ist bei reinem HTTP nicht exakt möglich. Ein "Verlassen" gibt es da nicht, da jeder Request für sich mit seiner Beantwortung beendet ist. Du könntest also feststellen, wieviele Requests noch laufen. Das ist aber leider auch unsinnig, da die auch von Subrequests einer "Page" stammen können (CSS, JS, Bilder, sonstige externe Daten).

    Außerdem wird ein User i.d.R. auch nach Erhalt der Seite noch eine Weile darauf verweislen und sie lesen. Das tut er aber bereits "offline", da die Page ja schon auf seinem Client liegt.

    Wenn Du also diese typische "### User Online" Anzeige bauen willst, kannst Du nur mit Statistik arbeiten und registrieren, wie lang die typische Zeit von einem Click (direkt benutzergesteuerte GETs oder POSTs) ist. Wenn ein User dann z.B. mehr als doppelt solange, wie es typisch wäre, nicht mehr geklickt hat, wird er wohl "gegangen" sein.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  4. Hi,

    1.Variante:
    Du koenntest jeweils das Javascript-Ereignis onunload http://de.selfhtml.org/javascript/sprache/eventhandler.htm auswerten und eine Pruefung in Auftrag geben, ob ein anderer Datenzugriff durch den per SessionID identifizierbaren Nutzer in Auftrag gegeben worden ist. Ist das nicht der Fall, hat sich der Nutzer ausgeloggt und Du kannst die Session als geschlossen markieren.
    (Diejenigen Nutzer, die bspw. durch Abschalten von JavaScript das Ausfuehren Deiner Logik unterbinden, kannst Du als unfreundliche Nutzer betrachten und das entsprechend kommunizieren.   ;-)

    2.Variante:
    Du unterstuetzt Ausloggen. Keine schlechte Idee uebrigens.
    (Sollte einer Dein Vorgehen anzweifeln, so kommunzierst Du die Sache mit den Worten "Ich unterstuetze Gebrauchsfaelle" ;-)

    3.Variante:
    Du gehst so vor wie allgemein empfohlen und setzt ein SessionTimeout, dass Du an den jeweils letzten Datenzugriff eines Nutzers bindest. 15-30 Minuten fuer dieses Timeout waeren OK.
    (Sollte dieses Vorgehen irgendwie kritisiert werden ( http://aktuell.de.selfhtml.org/artikel/programmiertechnik/useronline/index.htm faellt mir da so ein), dann suchst Du mit dem Kritiker den Diskurs, faengst an ueber die Vorteile von verbindungslosen Protokollen zu philosophieren und merkst Dir fuer spaetere Einwandsbehandlungszwecke die Argumentationen der Gegenseite ;-)

    Gruss,
    Ludger