Wenn Sie fragen, ob es eine Möglichkeit gibt zu sehen, ob die Sitzung eines Benutzers abgelaufen ist -
Ja! Dies hängt davon ab, wie Sie die serverseitige Komponente der Sitzung speichern. Denken Sie daran, dass herkömmliche Sitzungen 2 Teile benötigen, um korrekt zu funktionieren - etwas auf der Clientseite (ein Cookie zum Beispiel) und etwas auf der Serverseite, um sich an den Benutzer zu erinnern. In Sails wird das Server-Side-Stück in dem Datenspeicher gespeichert, der in dem adapter
-Teil der Session Config File angegeben wird. Sie können diesen Datenspeicher abfragen (selbst wenn es sich um den Standardspeicher handelt) und nach allen Benutzern suchen, die abgelaufene Sitzungen haben.
tiefer gehen ...
Wenn Sie sich fragen, ob es eine spezielle Methode, die aufgerufen wird, wenn eine Benutzersitzung abläuft, dann nein, das ist nicht die Art und Weise Sitzungen arbeiten. Sitzungen sind ein "Hack", um HTTP stateful zu machen. Sie sind keine aktive/lebende Sache in der Art, dass wenn sie sterben, wir benachrichtigt werden. Eine Sitzung ist nur ein Datensatz (wahrscheinlich eine Datenbank) mit einem langen Code und einem Datum. Wenn der Nutzer Ihre Website besucht, gibt er Ihnen einen Code von seinem Cookie und Sie verifizieren mit dem Datensatz in Ihrer Sitzungsdatenbank. Wenn der Datensatz übereinstimmt und nicht abgelaufen ist, HURRA! Sie wissen wer sie sind und sie setzen ihre Anfrage fort. Wenn der Datensatz nicht übereinstimmt oder abgelaufen ist, fordert BOO! Sie auf, sich erneut anzumelden.
Wirklich voreilige Schlüsse zu ziehen jetzt ...
ich aus dem letzten Satz nehme an, dass Sie suchen, um zu versuchen, jemand zu überwachen, ob angemeldet ist „aktiv“ Benutzer zu verfolgen. Ich würde vorschlagen, dass Sitzungen ein schlechtes Maß dafür sind. Mit Sitzungen kann ich mich auf Ihrer Website anmelden und dann verlassen. Abhängig von der Länge Ihres Sitzungsablaufs (24 Stunden oder 30 Tage sind typische Werte) würde ich für die gesamte Zeit als eingeloggt angezeigt werden. Ist das eine wirklich hilfreiche Metrik? Ich benutze nicht Ihre Website, aber Sie zeigen mich als "eingeloggt" an. Außerdem könnte ich auf einem anderen Gerät (Telefon oder einem anderen Browser) zurückkommen und ich müsste mich wieder einloggen. Jetzt habe ich 2 oder mehr Sitzungen. Welches ist korrekt?
Wenn Sie versuchen, die aktive Nutzung zu beurteilen, würde ich entweder Websockets verwenden (sie würden Ihnen genau sagen, wann jemand eine Verbindung zu einer Ihrer Seiten hat - read more here) oder einfach einen "Herzschlag" - jedes Mal ein Benutzer besucht eine Ihrer Seiten, die als last seen at
erfasst wurde. Dies gibt Ihnen eine ungefähre Einschätzung, wer aktiv auf der Website ist und wer nicht, sagen wir, über eine Stunde getan hat.
Ich habe mir Zeit genommen, Optionen zu analysieren. WebSockets können eine Verbindungs-/Verbindungsunterbrechung melden, aber das Problem tritt auf, wenn ein Benutzer einer Seite beitritt und eine Seite verlässt, egal wie (z. B. durch Klicken auf einen Link). Ich beschloss, den Server alle 1 Minute zu pingen (mit einer einfachen Ajax-Anfrage). Wenn die Serverzeitdifferenz vom letzten Ping mehr als 5 Minuten beträgt, wird ein Benutzer als offline betrachtet. Danke für deine ausführliche Antwort. – dovahkiin
Sie sind genau richtig. Große einfache Lösung @dovankiin. Web-Socket-Lösungen funktionieren besser in einer Rich-JavaScript-Webanwendung wie Angular, wo Sie erwarten können, dass sich der Benutzer auf derselben "Seite" befindet, damit Sie den Session-Socket verwalten können. – mwielbut