2016-09-16 2 views
1

ich ein Session-Management-System für ein Nebenprojekt von mir entwerfen, und ich ringe mit einer einfachen Lösung für die folgenden Anforderungen zu finden:Sitzungsverwaltung - mehrere Sitzungen, die ablaufen und ungültig gemacht werden können?

Anforderungen:

  1. Ein Benutzer kann mehrere Sitzungen
  2. Alle Sitzungen für einen Benutzer kann nach 30 Minuten verfallen sofort
  3. Sessions für einen Benutzer für ungültig erklärt werden

Ich habe Ansätze gesehen, um einem Benutzer zu erlauben, mehrere Sitzungen zu haben, die natürlich ablaufen (zB Redis und generierte Schlüssel). Dieser Ansatz bietet jedoch keine einfache Möglichkeit, alle Sitzungen eines Benutzers ungültig zu machen, da jeder Schlüssel für eine Sitzung ein zufällig generierter Wert ist.

Ich habe auch Ansätze gesehen, bei denen ein Benutzer mehrere Sitzungen haben kann, indem er die generierten Sitzungs-IDs für einen Benutzer in einer RDBMS-Tabelle verfolgt. Während dies es einfach macht, alle Sitzungen eines Benutzers ungültig zu machen, habe ich jetzt einen zusätzlichen Prozess, der abgelaufene Sitzungen ungültig machen/löschen muss, weil die Datenbank (PostgreSQL, MySQL, usw.) dies nicht selbst tut.

Gibt es einen Ansatz, wo ich alle 3 haben kann?

+0

Darf ich fragen, warum Sie mehrere Sitzungen statt einer einzigen oder gar keine Sitzung wollen? –

+0

Ich möchte zulassen, dass mehrere Geräte, Browser usw. sich mit denselben Anmeldeinformationen authentifizieren können, aber als unabhängige Sitzungen behandelt werden. Die "keine Sitzung" bringt jedoch einige interessante Gedanken hervor. Danke für die Idee! – gordysc

+0

Aus der Sicht Ihres Webservers ist eine Sitzung eine Sitzung, was bedeutet, dass es nichts a priori geben sollte, was verhindern würde, dass Ihr Server eine mobile und Desktopsitzung für den gleichen Benutzer hat. –

Antwort

0

Soweit ich von Ihrer Frage verstehe, kann ich mit redis selbst eine Lösung finden. Anstatt einen separaten Schlüssel für jede Sitzung zu haben, können Sie Redis Hash für alle Sitzungen, die Sie möchten.

Grundsätzlich wären die Schlüssel des Hashs Ihre eindeutigen Session-IDs, die auf der Client-Seite generiert würden. Die Werte wären jede Art von Daten, die Sie pro Sitzung verwalten möchten (Sie können einen JSON als String speichern). .

Und Sie können dann eine TTL auf den gesamten Hash anwenden, um alle Schlüssel auf einmal abzulaufen. So erfüllen Sie alle Anforderungen

+0

perfekt, danke! – gordysc

Verwandte Themen