BloodySword: Benutzer nach 5 minütiger Inaktivität ausloggen (Session killen)

Hallo ich habe mal eine Frage...

Ich arbeite mit Sessionen und einem Indikator ob der Benutzer online oder offline ist in der Datenbank...

Wie bekomme ich es hin, dass nach 5 Minütiger Inaktivität der Benutzer automatisch ausgeloggt wird? Oder, dass dies beim Schließen des Fensters gleich passiert?

Dabei soll auch der Eintrag in der Datenbank auf offline gestellt werden.
Danke im Voraus. Hoffe ihr hattet frohe Ostern!!!

lg BloodySword

  1. Ich arbeite mit Sessionen und einem Indikator ob der Benutzer online oder offline ist in der Datenbank...

    Beschreibe den Zustand online/offline genauer. Ich habe eine sehr schwammige Vorstellung davon, die sich darauf beschränkt, dass ich meinen WLAN-Dongle ausziehe.

    Wie bekomme ich es hin, dass nach 5 Minütiger Inaktivität der Benutzer automatisch ausgeloggt wird? Oder,

    Definiere Inaktivität? Du kannst bestenfalls Aktivität registrieren, und einen Unterschied feststellen, ob zwischen der aktuellen und der letzten Aktivität mehr als 5 Minuten vergangen sind.

    dass dies beim Schließen des Fensters gleich passiert?

    Was hat das Schliessen meines Fensters mit einem Request zu tun?

    Dabei soll auch der Eintrag in der Datenbank auf offline gestellt werden.

    Übersetze deine Bedürfnisse in HTTP-gerechte Klassen.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. »» Ich arbeite mit Sessionen und einem Indikator ob der Benutzer online oder offline ist in der Datenbank...

      Beschreibe den Zustand online/offline genauer. Ich habe eine sehr schwammige Vorstellung davon, die sich darauf beschränkt, dass ich meinen WLAN-Dongle ausziehe.

      »» Wie bekomme ich es hin, dass nach 5 Minütiger Inaktivität der Benutzer automatisch ausgeloggt wird? Oder,

      Definiere Inaktivität? Du kannst bestenfalls Aktivität registrieren, und einen Unterschied feststellen, ob zwischen der aktuellen und der letzten Aktivität mehr als 5 Minuten vergangen sind.

      »» dass dies beim Schließen des Fensters gleich passiert?

      Was hat das Schliessen meines Fensters mit einem Request zu tun?

      »» Dabei soll auch der Eintrag in der Datenbank auf offline gestellt werden.

      Übersetze deine Bedürfnisse in HTTP-gerechte Klassen.

      mfg Beat

      dümmlichere Antworten sind dir wohl nicht mehr gekommen?
      Zeitvergeudung....
      Moddoi

      1. Ich kombiniere nun mal wenn ich alles zusammenfasse was man mir geraten hat:

        Ich bin also auf die Requests anderer User angewiesen um einen bestimmten User auszuloggen, der nicht mehr aktiv war.

        Gibt es denn keine Möglichkeit eine Art Mini-PHP-Agent einzuschalten, der alle 5 Minuten ein Code ausführt?

        lg BloodySword

        1. Ich bin also auf die Requests anderer User angewiesen um einen bestimmten User auszuloggen, der nicht mehr aktiv war.

          Gibt es denn keine Möglichkeit eine Art Mini-PHP-Agent einzuschalten, der alle 5 Minuten ein Code ausführt?

          Ich sehe dein problem als allgemeines Session-Problem. meine eigenen Sites sind genau so davon betroffen.
          Ich arbeite mit Perl. Auf der Ebene von HTTP gibt es aber keine Unterschiede.
          OK. Ein User kommt. Ich gebe ihm eine SID, wenn ich ihn nicht erkenne/er keine SID sendet.
          Wie lange ist die SID gültig? Nennwen wir die Zeit T
          Ich muss mit der SID imer einen timestamp loggen.

          Ein Request basiert immer auf zwei Zugriffen des Session-Logfiles.
          zuerst: Suche nach einer Session und hole Daten
          ... mache dein Zeugs
          Speichere Änderungen in der Session

          Während diesem Speichern kann ich nun ALLE Sids überprüfen, ob welche veraltet sind. Das heisst: Irgend ein Request hilft mir beim Aufräumen verbrauchter Sessions.

          Login/Logout: Das ist eine zu den Sessions orthogonale Rechte-Registrierung. Ein User ist bei mir dann in seinem Login Status, wenn seine Session einen Userstatus aufweist, der ihm Rechte gibt über einen Gast hinaus. Das Können Mitglieder-Rechte, Subadmin-Rechte oder Admin-Rechte sein.
          Ein Logout ist entweder aktiv, dadurch dass ein angemeldeter User seine Session killt und damit in den Default-Status eines Gastes gerät
          oder passiv möglich, indem _irgend_ eine Request-Behandlung feststellt, dass die Session dieses Users ihre Lifetime überschritten hat.
          Im letzteren Fall habe ich aber keine Möglichkeit, dies dem betroffenen User aktiv mitzuteilen. Er wird es erst beim nächsten Request feststellen.

          Was ich aber tun kann:
          Ich kann mit JS dem User mitteilen (countdown) wie lange seine aktuelle Seite noch gültig ist in dem Sinne, dass auf dem Server eine gültige Session vorliegt.
          Ein eingeloggter User kann also auf die countdown Uhr schielen und selbst entscheiden, ob er die Session stillschweigend sterben lassen will, oder durch einen neuen Request die Lifetime erneuert, also eingelogged bleibt.

          Falls der User sich wo anders verweilt, wird der obige Automatismus die Session killen.

          So sehe ich das.

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Das klingt schon einleuchtend. Jetzt müsste ich es nur noch hinbekommen es zu programmieren. PHP stellt Session-Funktionen bereit. In wie weit diese für das, was ich vorhabe ausreichen weiß ich noch nicht. Da werde ich dann mal einige Zeit damit in Ruhe verbringen müssen das nachzulesen.

            Was ich genau tun möchte ist eigentlich sehr simpel:

            Auf der Site gibt es nur eingeloggte User, das heißt es gibt keine User mit Gastrechten. Ein Gast hat so wenig Rechte, dass eine Session für disen nicht nötig ist.

            Ein Benurtzer loggt sich ein und surft auf der Site. Bei jedem Request wird die Session wieder auf 5 Minuten verlängert.

            Läuft die Sessionzeit ab so soll der User automatisch ausgeloggt werden. Genau so als würde er auf Logout klicken und die Session selber killen.

            Geht ein Request in die Hose (Internet Verbindung weg) soll auch aus Sicherheitsgründen die Session ebenfalls gekillt und der user ausgelogt werden.

            Die Frage aller Fragen ist nun, wenn ich bei PHP die Sessionen erstellen lasse, wie kann ich diese abfragen und alle zusammen bei jedem Request eines Users auswerten?

            Das bedeutet also auch, wenn wenig Request kommen (weil wenig User on sind) kann also die Dauer des Session-Time-Outs variieren.

            lg BloodySword

  2. Hello,

    Ich arbeite mit Sessionen und einem Indikator ob der Benutzer online oder offline ist in der Datenbank...

    Wie bekomme ich es hin, dass nach 5 Minütiger Inaktivität der Benutzer automatisch ausgeloggt wird?

    Das wurde hier schon mehrfach diskutiert. Ich versuche mal, eien der Threads für Dich im Archiv zu finden ...

    http://forum.de.selfhtml.org/archiv/2008/4/t170126/#m1111727

    Richte Dein Augenmerk besonders auf die Skizze der Funktion "is_logged()"
    Die sollte genau Deine Frage beantworten.

    Aber wie Du sehen kannst, funktioniert das nur im Verbund mit anderen Maßnahmen. Du musst Dir also ein komplettes System dafür aufbauen.

    Oder, dass dies beim Schließen des Fensters gleich passiert?

    Welches Fensters? Meinst Du das Zeitfenster?

    Liebe Grüße aus dem Cyberspace

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Beschreibe den Zustand online/offline genauer. Ich habe eine sehr schwammige Vorstellung davon, die sich darauf beschränkt, dass ich meinen WLAN-Dongle ausziehe.

    Aber ganz ganz langsam.

    1. »» Beschreibe den Zustand online/offline genauer. Ich habe eine sehr schwammige Vorstellung davon, die sich darauf beschränkt, dass ich meinen WLAN-Dongle ausziehe.

      Aber ganz ganz langsam.

      Online/Offline bedeutet in dem Fall, ob der Benutzer eingeloggt ist oder nicht. ;o) Eben wie in einem Forum.

      1. Hi,

        Online/Offline bedeutet in dem Fall, ob der Benutzer eingeloggt ist oder nicht.

        Dann erfordert das "oder nicht" also einen Logout.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. Genau, offline erfolgt durch Logout. Und Logout erfolgt auch durch 5 Minütiger inaktivität (keine Seite mehr auferufen / keine Ajaxanfragen mehr).

  4. Hello,

    kleiner Nachtrag.

    Du könnterst mal folgendes untersuchen:
    Wenn das Browserfenster beim Client geschlossen wird, noch bevor die Response abgeschickt wurde zum Client, dann kann PHP/Apache das ggf. feststellen. Das ist ein Durchgriff in die unter HTTP liegenden Schichten, aber das muss Dich ja nicht unbedingt interessieren, _wer_ das nun festgestellt hat.

    In PHP könnte das ankommen in http://de3.php.net/manual/en/function.connection-status.php und speziell in http://de3.php.net/manual/en/function.connection-aborted.php

    Wenn Dein Script also irgendwelche Schleifen durchläuft (z.B. um eine komplexere Abfrage zu beantworten), bevor es die Response auf den Weg schickt, könnte es innerhalb dieser Schleifen also den Status abfragen. Das Ergebnis abzusenden, hat dann nämlich gar keinen Sinn mehr.

    Beauftragte Datenveränderungen sollten aber trotzdem zuende abgewickelt werden, da sonst die Integrität der Daten gefährdet ist.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. In PHP könnte das ankommen in http://de3.php.net/manual/en/function.connection-status.php und speziell in http://de3.php.net/manual/en/function.connection-aborted.php

      Funktioniert das auch so zuverlässig, dass ich auf das "5-minuten-Timeout" komplett verzichten kann?

      lg BloodySword

      1. Hello,

        In PHP könnte das ankommen in http://de3.php.net/manual/en/function.connection-status.php und speziell in http://de3.php.net/manual/en/function.connection-aborted.php

        Funktioniert das auch so zuverlässig, dass ich auf das "5-minuten-Timeout" komplett verzichten kann?

        Zuverlässig kann es nut bedingt sein, da Der Server den Verbindungsabbruch nur während der Scriptlaufzeit feststellen kann. Wenn das Script durchgelaufen ist, bekommt er nichts mehr davon mit, weil er dann selber schon die Verbindung aufgehoben hat.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de