Sitzungsverwaltung auf dem Server

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu DataSnap-Anwendungen entwickeln


Wenn ein Client eine Verbindung zu einem DataSnap-Server herstellt, wird eine Sitzung erstellt. Diese Sitzung wird durch eine Instanz oder Unterklasse von TDSSession repräsentiert. Die Klasse TDSAuthSession erweitert TDSSession und verfügt selbst über Unterklassen (TDSRESTSession, TDSTCPSession, TDSTunnelSession). Diese Instanzen enthalten eine TDSCustomAuthenticationManager-Instanz und ermöglichen eine Autorisierungsprüfung.

Lebenszyklus einer Sitzung

Festlegen von SessionTimeout

Bei einer TSQL-Verbindung zum DataSnap-Server über TCP oder HTTP, wird die Sitzung nur beendet, wenn die Verbindung geschlossen wird. Bei einer TDSREST-Verbindung kann die Lebensdauer einer Sitzung durch die Eigenschaft SessionTimeout gesteuert werden, die entweder von der Klasse TDSHTTPServerTransport oder der Klasse TDSHTTPServer bereitgestellt wird. Beispielsweise veröffentlichen die Komponenten TDSHTTPService und TDSHTTPWebDispatcher diese Eigenschaft. Der Wert wird in Millisekunden angegeben und repräsentiert die zulässige inaktive Dauer einer Sitzung, bevor die Sitzung abläuft. Wenn ein Client eine Anforderung an den Server mit seiner Sitzungs-ID sendet, wird die Sitzung zu diesem Zeitpunkt als aktiv gekennzeichnet und die Uhr für den Sitzungsablauf zurückgesetzt.

Schließen einer Sitzung

Zum Schließen einer Sitzung müssen Sie die SessionId (eigentlich TDSSession.Name) kennen. Rufen Sie zum Schließen einer Sitzung einfach Folgendes auf:


TDSSessionManager.Instance.CloseSession(SessionId);

Ermitteln der Sitzung des aktuellen Threads

Aus einer Servermethode können Sie beispielsweise die Sitzung des aktuellen Threads ermitteln. Auf diese Weise erhalten Sie wichtige Informationen über den Benutzer, der die aktuelle Anforderung gesendet hat. Verwenden Sie dazu den folgenden Code:


Session := TDSSessionManager.GetThreadSession;

Benachrichtigen bei der Erstellung und des Ablaufs von Sitzungen

Sie können beim TDSSessionManager ein Ereignis registrieren, das benachrichtigt wird, wenn neue Sitzungen erstellt werden und alte ablaufen. Verwenden Sie dazu den folgenden Code:


TDSSessionManager.Instance.AddSessionEvent(
  procedure(Sender: TObject;
            const EventType: TDSSessionEventType;
            const Session: TDSSession)
  begin
    case EventType of
      SessionCreate:
        {The provided Session was just created.}
      SessionClose:
        {The provided Session has just been closed, either intentionally or it has expired.}
    end;
  end);

Wenn Sie das Ereignis später entfernen möchten, speichern Sie es in einem Feld, rufen Sie RemoveSessionEvent auf, und übergeben Sie das Ereignis als Parameter.

Daten einer Sitzung

Sie können Daten in einer Sitzung speichern. Die Daten werden in Schlüssel/Wertepaaren gespeichert, wobei sowohl der Schlüssel als auch der Wert Strings sind.

Speichern von Daten

Zum Speichern von Daten in einer Sitzung rufen Sie PutData auf und übergeben den zu speichernden Schlüssel und Wert.

Ermitteln von Daten

Um zu ermitteln, ob ein Wert für einen bestimmten Schlüssel vorhanden ist, rufen Sie HasData auf. Zum Abrufen eines Wertes rufen Sie GetData auf und übergeben den Schlüssel als Parameter.

Entfernen von Daten

Zum Entfernen eines Schlüssel/Wertepaares aus den Sitzungsdaten rufen Sie RemoveData auf und übergeben den Schlüssel als Parameter.