Datenbankwerk ändern, sobald Session beendet ist.

  • Hey,


    aktuell bin ich dabei, eine kleine Liste zu erstellen, von Benutzern die aktuell Online sind
    Beim Einloggen wird das ganze ja in einer Session gespeichert. Wenn ich mich einlogge, wird in der Datenbank die spalte "Online" auf "Ja" gesetzt.


    Nun ist das Problem, dass nach einer bestimmten Zeit die Session automatisch beendet wird. Daher wird in der Datenbank auch die Spalte "Online" nicht auf "Nein" gesetzt.

    Wollte mal Fragen ob es dafür eine Lösung gibt.



    LG

  • Für genau diese Variante - nein.


    Du kannst aber einfach eine Zeit eintragen.

    Z.B. "last_seen" : "2021-11-06 14:33:23"

    (column Typ Datetime)


    Online wäre der User dann, wenn das letzte "last_seen" nicht älter als {n} Minuten ist.

  • Alles klar, Danke dir.


    Aber wie ist das dann, wenn der User trotzdem noch aktiv ist, aber das last_seen schon älter ist?

  • Wenn der User länger nicht aktiv ist, dann kannst du den Eintrag in der DB auch nicht aktualsieren, eigentlich logisch, oder?

    Wenn ich mich einlogge, wird in der Datenbank die spalte "Online" auf "Ja" gesetzt.

    Daher wird in der Datenbank auch die Spalte "Online" nicht auf "Nein"

    Du schreibst aber nicht wirklich ja oder nein in die DB, oder?

  • Also ich habe es so verstanden:

    Der Benutzer loggt sich ein -> Session wird erstellt. In der Datenbank wird das last_seen auf den Zeitpunkt gesetzt wo er sich eingeloggt hat.
    Sagen wir 16:25:00 06.11.2021. Dann ist der User Online. Ich versuche grad nur zu verstehen, wie man dann erkennt, wann der User wieder Offline ist.

    Weil dieses last_seen ja nur beim Einloggen geändert wird.



    Und m.scatello nein das tue ich nicht. Das war jetzt als Beispiel.

  • Zunächst mal muss man festlegen, wann ein Benutzer als "noch aktiv" gelten soll:

    a) Er hat eine Seite geöffnet, unabhängig davon ob er Aktivitäten ausführt. Dann kannst Du mit einem Heartbeat arbeiten, d. h. der Browser sendet zyklisch ein Lebenszeichen und beim Empfang wird das "last_seen" aktualisiert. Problem: Die Seite kann in einem nicht aktiven Tab noch offen sein und der Benutzer hat sie vergessen:

    b) Der Benutzer führt irgend welche Aktivitäten aus. Dann kannst Du bei jeder Aktivität das "last_seen" aktualisieren. Kommt eine Aktivität nach Ablauf der Zeit, gilt er als ausgeloggt. Man kennt das ja, dass man eine Meldung bekommt der Form "Sie wurden aus Sicherheitsgründen ausgeloggt weil Sie mehr als xxx Minuten nicht aktiv waren."

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Sempervivum ()

  • Ja alles klar.
    Also habe das jetzt vorerst gemacht für jede Seite, also auf jeder Seite eine Aktualisierung.


    Geht das auch für wirklich jede Aktivität? Also z.b irgendwo hinklicken? Bzw Buttons nutzen etc? Weil ja nicht immer die Webseite aktualisiert wird.

  • Die Seite kann in einem nicht aktiven Tab noch offen sein und der Benutzer hat sie vergessen:

    Hearbeat + Man könnte noch per JS abfragen, ob der Tab aktiv ist (also nicht im Hintergrund, Stichwort "focus").

    (Evtl zu viel auf einmal. Wollte es nur erwähnen.)

  • Zitat

    Geht das auch für wirklich jede Aktivität? Also z.b irgendwo hinklicken?

    Natürlich, Du kannst für das ganze Dokument einen Eventlistener registrieren und ebenfalls eine Nachricht an den Server schicken. Wahrscheinlich nur, wenn nach dem letzten Klick oder Keypress eine gewisse Zeit verstrichen ist, sonst kann es bei wildem Klicken zu einer Flut von Nachrichten kommen.

  • Zitat

    Also einfach einen Eventlistener, der auf jeder Seite jeden klicke registriert?

    Ja, könnte man so machen. Damit sich der Code nicht wiederholt, wenn es mehrere Seiten sind, kannst Du ihn ja auslagern.

  • Geht das auch für wirklich jede Aktivität? Also z.b irgendwo hinklicken? Bzw Buttons nutzen etc? Weil ja nicht immer die Webseite aktualisiert wird.

    Die Frage ist auch warum?

    Wenn man z. B. auf einer Sparkassenseite ist, oder alles andere wo es um sensible Daten geht , kann ich es noch verstehen das inaktive User schnell ausgeloggt werden .

    Alles andere , wie hier im Forum reicht es ja beim Seitenaufruf oder so., eicht es ja die online Aktivität auch JA zu stellen

    Was hast du den vor?

    Vielleicht kann man dann ja mal was eingrenzen.