Interface ISessionData
Mithilfe dieser Schnittstelle können über IGlobalObjects am Broker verschlüsselte Daten gespeichert werden. Die Speicherung der Daten erfolgt im Runtime-Repository in der Tabelle tblRep_SessionData.
Der Kontext dieser Daten ist der Client, unabhängig vom Benutzer. So können z.B. Login-Informationen gespeichert werden, sodass sich der Benutzer bei einem wiederholten Start der Anwendung nicht erneut anmelden muss.
Der Schlüssel für die Verschlüsselung wird mit einer ID versehen und an den Client geschickt. Der Broker/Server ist damit nicht in der Lage, die gespeicherten Daten ohne Hilfe eines Clients zu entschlüsseln.
Der Zugriff auf diese Schnittstelle erfolgt über das GlobalObject Property SessionData.
Namespace: FS.Hosting.Shared.SessionDataModel
Assembly: FS.Hosting.Shared.dll
Syntax
[DocfxBrowsable]
public interface ISessionData
Remarks
Ablauf beim erstmaligen Speichern von Session-Daten
Nachfolgend wird der Prozess beschrieben, welcher durchlaufen wird, wenn der Broker zum ersten Mal für einen Client Session-Daten im Runtime Repository speichern soll und damit noch kein Verschlüsselungs-Key existiert.
Der Client wurde gestartet und es wird ein Event ausgelöst, welches am Broker die SetData(String, String)-Methode aufruft. Nun soll für einen Schlüsselwert "Test" der Wert "1234" verschlüsselt gespeichert werden. Die SetData(String, String)-Methode könnte während eines Requests natürlich auch mehrmals für unterschiedliche Schlüsselwerte aufgerufen werden.
Während ein Request vom Broker bearbeitet wird, werden alle Key/Value-Paare, die mit SetData(String, String) verschlüsselt werden sollen am Broker zwischengespeichert. Am Ende des Requests, kurz bevor die Antwort an den Client gesendet wird, werden die Daten nun verarbeitet.
Der Broker hat vom Client bisher keinerlei Informationen über einen Verschlüsselungs-Key bekommen. Dies veranlasst den Broker, einen neuen AES256 Verschlüsselungs-Key zu generieren. Zusätzlich wird eine ID generiert, welche den Datensatz im Runtime Repository 1:1 dem Client zuordnet.
Mit dem AES256-Key wird das Key/Value-Paar ("Test"/"1234") nun verschlüsselt und mit der ID im Runtime Repository abgespeichert.
Mit der nun folgenden Antwort an den Client werden die ID und der AES256-Key mitgeschickt. Der Client speichert sich diese Kombination persistent, sodass sie auch bei einem Neustart noch verfügbar ist.
Ablauf bei erneutem Start des Clients
Nachfolgend wird der Prozess beschrieben, welcher durchlaufen wird, wenn der Client auf Session Daten zugreifen will, die in einer vorherigen Session gespeichert wurden.
Wir gehen davon aus, dass der Client, wie im letzten Beispiel beschrieben, das Key/Value-Paar "Test"/ "1234" am Broker gespeichert hat und dafür die ID und den AES256-Key bekommen hat. Zwischenzeitlich wurde der Client und damit auch die Broker-Session beendet. D.h., der Broker hat nun keinerlei Informationen mehr darüber, wie er den gespeicherten Datensatz entschlüsseln kann.
Wird der Client erneut gestartet, stellt dieser fest, dass für ihn eine ID/AES256-Key Kombination gespeichert wurde. Diese Kombination schickt der Client im allerersten Request an den Broker.
Wird nun über SetData(String, String) ein Datensatz verlangt, kann der Broker mittels der vom Client gesendeten ID den Datensatz im Runtime Repository ausfindig machen und mit Hilfe des übermittelten AES256-Keys die Daten entschlüsseln.
Ablauf von Session Daten
Alle Daten, die mit SetData(String, String) gespeichert werden, erhalten ein Ablaufdatum. Die Validität der Daten ist auf 14 Tage festgesetzt. Meldet sich also ein Client 14 Tage lang nicht am Broker an, so werden alle gespeicherten Session Daten verworfen. Bei einem erneuten Speichern von Daten wird dann eine neue ID/AES256-Key Kombination generiert.
Meldet sich ein Client innerhalb der 14 Tage am Broker an, so wird das Ablaufdatum verlängert (Anmeldedatum + 14 Tage). Bei kontinuierlicher Anmeldung am Broker verfallen die Session-Daten also nicht.
Methods
GetData(String)
Gibt den Wert zurück, der für einen Schlüssel gespeichert wurde.
HasData(String)
Prüft, ob für den übergebenen Schlüssel einen Wert existiert.
SetData(String, String)
Setzt den Wert für einen Schlüssel.