Online-Status USER automatisch ändern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Online-Status USER automatisch ändern

    Hallo Zusammen.

    Ich bräuchte mal bitte ein paar hilfreiche Gedanken.

    Der User loggt sich ein und in einer MySQL wird IP und Timestamp gespeichert. Zusätzlich bekommt das Feld ONLINESTATUS eine 1 (= online; 0 = offline). Loggt er sich wieder "richtig" aus, bekommt das Feld ONLINESTATUS die 0 gesetzt.

    Aber - schließt er einfach den Browser OHNE Logout bleibt er weiter als ONLINE gespeichert, was bis hierher ja auch logisch ist. Wie kann ich das abfangen?

    Danke!

    UWE

  • #2
    Die Spalte ONLINESTATUS ist unnötig und solltest du komplett weg lassen. Es reicht der Timestamp. Wenn der User eine Aktion auf der Seite tätigt, dann setze den Timestamp auf den aktuellen Zeitpunkt. Wenn sich der User ausloggt, dann setze ihn auf NULL.

    Eine Person ist "online", wenn der Timestamp nicht NULL und größer als aktueller Zeitpunkt minus <festgelegte Zeitdauer> ist. Ansonsten ist er "offline".
    Zuletzt geändert von h3ll; 28.04.2013, 10:48.

    Kommentar


    • #3
      *edit, wg. sorry falsch hier*
      Wir werden alle sterben

      Kommentar


      • #4
        Danke für die prompte Antwort.
        Wie ermittle ich "eine Aktion des Users" auf der Seite?

        Wenn sich der User ausloggt, dann setze ihn auf NULL.
        Das versteh´ ich. Aber wie fange ich das ab wenn er sich NICHT ausloggt und einfach die Website wechselt oder den Browser schließt?

        DANKE!

        Kommentar


        • #5
          Zitat von ugenmeister Beitrag anzeigen
          Danke für die prompte Antwort.
          Wie ermittle ich "eine Aktion des Users" auf der Seite?
          Da gibts nichts zu ermitteln. Jedesmal, wenn ein Request von einem User kommt, setzt du den Timestamp. Der Request kommt zu dir und nicht du zum Request

          Zitat von ugenmeister Beitrag anzeigen
          Das versteh´ ich. Aber wie fange ich das ab wenn er sich NICHT ausloggt und einfach die Website wechselt oder den Browser schließt?
          Deswegen eine festgelegte Zeitdauer. Also angenommen der User hat in den letzten 10 Minuten nichts gemacht, dann kannst du davon ausgehen, dass der User entweder das Fenster gewechselt, seinen Platz verlassen oder den Browser geschlossen hat. Damit kriegst du zumindest schon mal einen annähernd brauchbaren Status zusammen.

          Wenn das mal läuft, könnte man das ganze noch verfeinern. zB. könntest du per AJAX alle 10 Minuten einen Ping an dein Skript schicken, damit es weiß, dass der User die Seite noch offen hat, auch wenn er eine längere Zeit nichts aktiv auf der Seite macht (falls das so gewünscht ist).

          Einen richtigen Online-Status, der 100% korrekt ist, kriegst du über einen Webbrowser aber nicht hin. Das ist praktisch unmöglich, da es viele Faktoren gibt, die man nicht beeinflussen oder berücksichtigen kann.
          Zuletzt geändert von h3ll; 28.04.2013, 11:32.

          Kommentar


          • #6
            Einen richtigen Online-Status, der 100% korrekt ist, kriegst du über einen Webbrowser aber nicht hin. Das ist praktisch unmöglich, da es viele Faktoren gibt, die man nicht beeinflussen oder berücksichtigen kann.
            So ist es.
            Das HTTP ist ein Status loses Protokoll.

            Und deswegen machts die eingebaute Sessionverwaltung quasi genau so.
            Wir werden alle sterben

            Kommentar


            • #7
              Zitat von ugenmeister Beitrag anzeigen
              Wie kann ich das abfangen?
              Wie h3ll bereits schrieb, durch eine festgelegte Zeitdauer. Bei einer Bankverbindung sehe ich zum Beispiel die Uhr mitlaufen. Tue ich nichts in der angegebenen Zeit, wird die Sitzung automatisch beendet.

              Allerdings und das betrifft wohl mehr Deine Frage, wenn ich den Browser schließe, wird nicht nur die Sitzung beendet, sondern dem Server die Beendigung auch mitgeteilt. Somit könnte es die Seite sein, die da einen Ping vor dem Schließen sendet oder fortlaufend im Sekundentakt. Doch das weiß ich jetzt gerade auch nicht so genau, wie das abläuft.

              Kommentar


              • #8
                Allerdings und das betrifft wohl mehr Deine Frage, wenn ich den Browser schließe, wird nicht nur die Sitzung beendet, sondern dem Server die Beendigung auch mitgeteilt. Somit könnte es die Seite sein, die da einen Ping vor dem Schließen sendet oder fortlaufend im Sekundentakt. Doch das weiß ich jetzt gerade auch nicht so genau, wie das abläuft.
                Nöö...
                PHP bekommt vom schließen des Browser nix mit, es sei denn, das Script läuft gerade.
                Ein Abbruch der Verbindung wg. Netzwerk- Stromausfall usw. bleiben gänzlich unsichtbar.

                Einiger Weg das zu erkennen: ein Ajax Heartbeat.
                Wir werden alle sterben

                Kommentar


                • #9
                  Ich danke euch für die regen und brauchbaren Antworten!
                  Den theoretischen Teil kann ich daraus nun verstehen, was mir schon sehr weiterhilft. Was ich noch nicht verstehe ist, wie und wo ich es per Code umsetzen kann.

                  z.B. wie frage ich diesen Request ab damit ich erkenne ob der User die letzten 10 Min. etwas gemacht hat auf der Seite oder nicht?

                  ... wenn die Sitzung dann - nach 10 Min. - autom. beendet wird, dann muss doch bei diesem User der Timestamp in der MySQL wieder gelöscht werden oder? Ich weiß wie ich das Feld in der DB auf null setze, aber wie und wo kann ich das machen dass es "automatisch" passiert?

                  ... und das Ganze muss ja dann auch bei mehreren verschiedenen Usern passeren. Wie bekomme ich die Zuordnung der einzelnen Online-Usern hin? Jeder User ist ja ein eigener Datensatz in der DB.

                  Kommentar


                  • #10
                    Nix löschen!
                    Wozu auch?

                    User Online Anzeige - PHP Forum: phpforum.de
                    Zuletzt geändert von combie; 28.04.2013, 13:56.
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Wow - Danke combie. Das sieht doch schon ganz toll aus und hilft mir das Ganze besser zu verstehen.
                      Ich weiß dass es sich nicht gehört hier über Scripts/Beiträge von einer anderen Site zu diskutieren. Aber vielleicht kann ich doch eine Frage dazu stellen...


                      Wo und an welcher Stelle muss dieser Code stehen?
                      PHP-Code:
                      if(!empty($_SESSION['userid']))
                      {
                      $sql " UPDATE `users`
                      SET `last_hit` = NOW()
                      WHERE `user_id` = "
                      .$_SESSION['userid'];
                      mysql_query($sql);

                      Liege ich richtig wenn ich behaupte, dass dieser Code auf jeder Seite ganz am Anfang stehen muss?

                      Und wie kann ich es realisieren dass bei jedem User unter seinem Foto ONLINE erscheint (als Text oder Grafik)? Ich möchte keinen Code haben; ein Hinweis auf die Vorgehensweise reicht mir schon.

                      Kommentar

                      Lädt...
                      X