Sitzungen im Dart

8

Normalerweise hat die Dart-Dokumentation viele nützliche Beispiele zu fast jedem Thema. Leider konnte ich bei Dart-Sessions nichts finden.

Könnte jemand diesen Ansatz als eine korrekte Art und Weise, Sitzungen durchzuführen, validieren:

  1. Der Browser sendet eine GET-Anfrage zum Trennen.
  2. Der Server antwortet mit dem Webclient.
  3. Der Web-Client sendet Benutzeranmeldeinformationen.
  4. a) Der Server überprüft die Anmeldedaten und generiert einen Sitzungscookie. b) Der Server sendet das Sitzungscookie zurück an den Client.
  5. Der Web-Client speichert Cookies zur weiteren Verwendung.
  6. Der Web-Client sendet eine Anfrage für einige benutzerspezifische Daten und hängt den Cookie zur Verifizierung an.

Mein besonderes Interesse liegt in den Punkten 4, 5 und 6, da die anderen gut dokumentiert sind. Wenn Sie einige Codeausschnitte zu diesen Punkten teilen könnten, würde ich es sehr schätzen.

BEARBEITEN: Nachdem ich den Kommentar von Günter Zöchbauer unten gelesen hatte, schaute ich in shelf_auth. Ich erkannte, dass es erforderlich ist, die Server-App neu zu schreiben, um Regal zu verwenden. Also habe ich das gemacht.

Das main.dart:

%Vor%

Das routes.dart

%Vor%

Das handlers.dart

%Vor%

Leider weiß ich nach dem Lesen der shelf_auth -Dokumentation immer noch nicht genau, wo ich die Authentifizierung hinzufügen soll. Sie verwenden die Pipline-Syntax für den Handler.

    
Lukasz 07.05.2015, 16:59
quelle

1 Antwort

2

Ich beschreibe, wie die Sitzung in Java mit Servlets funktioniert. Dies könnte Ihnen dabei helfen, Ihre Implementierung zu unterstützen. Zuallererst muss ich erwähnen, dass Sitzung und Authentifizierung zwei getrennte Funktionen sind, obwohl letztere von der ersten abhängt.

Eine Sitzung hilft dem Server, aufeinanderfolgende Anforderungen zu verstehen, die vom selben Browser kommen, ohne dass dazwischen große Zwischenzeiten entstehen. Sehen Sie sich das folgende Beispiel an:

  1. Ein Benutzer hat einen Browser A geöffnet, Ihre Seite besucht
  2. Das Anklicken verschiedener Links über mehrere Registerkarten im Browser A
  3. wurde beibehalten
  4. Hat den Browser für 45 Minuten im Leerlauf gelassen
  5. Klicken Sie weiter auf die Seiten, die er offen gelassen hat
  6. Geöffneter Browser B, besuchte Ihre Seite
  7. Die Registerkarte für Ihre Website wurde im Browser B
  8. geschlossen
  9. Eröffnet eine andere neue Registerkarte in Browser B und klickte auf ein Lesezeichen zu besuchen Sie Ihre Website

Hier ist die Auswirkung auf die serverseitige Sitzung für die obigen Schritte des Benutzers:

  1. Neue Sitzung erstellt ... sagen wir JSESSIONID 10203940595940
  2. Die gleiche Sitzung gilt für alle Anfragen von allen Tabs
  3. Die Sitzung ist auf dem Server abgelaufen und wahrscheinlich wurde auf dem Server
  4. etwas Speicher freigegeben
  5. Da Java keine Sitzung finden kann, die mit JSESSIONID 10203940595940 übereinstimmt, erstellt es eine neue Sitzung und fordert den Client auf, sich an die neue JSESSIONID w349374598457
  6. zu erinnern
  7. Anforderungen von neuen Browsern werden als neue Sitzungen behandelt, da der JSESSIONID-Vertrag zwischen einem einzelnen Browser und dem Server besteht. Der Server weist also eine neue JSESSIONID wie 956879874358734
  8. zu
  9. JSESSIONID bleibt im Browser hängen, bis der Browser beendet wird. Das Schließen einer Registerkarte löscht die JSESSIONID
  10. nicht
  11. JSESSIONID wird immer noch vom Browser verwendet, und wenn nicht viel Zeit verstrichen ist, würde der Server immer noch an dieser Sitzung hängen bleiben. Also, das Sesison wird fortgesetzt.

Verwendung der Sitzung auf der Serverseite:

  • Eine Sitzung ist nur eine HashMap, die JSESSIONIDs mit einem anderen a abbildet Bündel von Attributen.
  • Es gibt eine Threadüberwachungszeit für die Sitzungen und Entfernen von JSESSIONIDs und der zugeordneten Attribute aus dem Speicher sobald a Sitzung läuft ab.
  • Normalerweise gibt es einige Vorkehrungen für Anwendungen, um ein Ereignis zu erhalten Benachrichtigung nur, wenn eine Sitzung für den Ablauf bereit ist.

Implementierungsdetails:

  • Der Browser A des Benutzers sendet eine Anfrage an den Server. Der Server prüft, ob dies der Fall ist ein Cookie mit dem Namen JSESSIONID. Wenn keiner gefunden wird, wird einer auf dem erstellt Server. Der Server notiert sich die neue JSESSIONID, die erstellte Zeit und die letzte Anforderungszeit, die mit der Zeit übereinstimmt, in der die Zeit erstellt wurde dieser Fall. In der HTTP-Antwort hängt der Server den neuen an JSESSIONID als Cookie.
  • Browser sind so konzipiert, dass Cookies für nachfolgende Besuche beibehalten werden zur selben Seite. Also, für alle nachfolgenden Besuche auf der Website, die Der Browser fügt weiterhin das JSESSIONID-Cookie der HTTP-Anfrage hinzu Überschrift.
  • Also, dieses Mal sieht der Server die JSESSIONID und kann die Anfrage an die bestehende Sitzung, falls die Sitzung noch nicht abgeschlossen ist abgelaufen. Falls die Sitzung bereits abgelaufen ist, würde der Server dies tun Erstellen Sie eine neue Sitzung und fügen Sie die neue JSESSIONID als Cookie hinzu in HTTP-Antwort.

Authentifizierungsmechanismen verwenden nur die obige Sitzungsbehandlung, um "neue Sitzungen" zu erkennen und sie auf die Anmeldeseite umzuleiten. Außerdem können vorhandene Sitzungen zum Speichern von Attributen wie "auth-status" - "pass" oder "fail" verwendet werden.

    
Teddy 19.05.2015 12:38
quelle

Tags und Links