Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » HTTP-Webdienste » SQL Anywhere als HTTP-Webserver » Webdienstanwendungen auf einem HTTP-Webserver entwickeln » HTTP-Sitzungsverwaltung auf einem HTTP-Server

 

HTTP-Sitzung löschen oder Sitzungs-ID ändern

Das explizite Löschen einer Datenbankverbindung, die innerhalb eines Sitzungskontexts im Cache gehalten wird, führt dazu, dass die Sitzung gelöscht wird. Diese Art der Löschung der Sitzung ist ein Abbruchvorgang. Von der Sitzungswarteschlange freigegebene Anforderungen haben einen Abbruchstatus. Diese Aktion stellt sicher, dass alle noch anstehenden Anforderungen der Sitzung beendet werden. Auf ähnliche Weise führt auch das Herunterfahren des Servers oder der Datenbank zum Abbruch aller Datenbankverbindungen.

Eine Sitzung kann gelöscht werden, indem die SessionID-Option in der Systemprozedur sa_set_http_option auf Null oder eine leere Zeichenfolge gesetzt wird.

Der folgende Code kann für das Löschen von Sitzungen verwendet werden:

CALL sa_set_http_option( 'SessionID', null );

Wenn eine HTTP-Sitzung gelöscht oder die SessionID geändert wird, werden alle ausstehenden HTTP-Anforderungen in der Sitzungswarteschlange freigegeben und ihre Ausführung außerhalb eines Sitzungskontextes zugelassen. Die ausstehenden Anforderungen verwenden nicht dieselbe Datenbankverbindung wieder.

Eine Sitzungs-ID kann nicht auf eine bereits vorhandene Sitzungs-ID eingestellt werden. Ausstehende Anforderungen, die sich auf die alte SessionID beziehen, werden zur Ausführung als sitzungslose Anforderungen freigegeben, wenn sich die SessionID geändert hat. Nachfolgende Anforderungen, die sich auf die neue SessionID beziehen, verwenden die durch die alte SessionID instanzierte Datenbank wieder.

Die folgenden Bedingungen gelten beim Löschen oder Ändern einer HTTP-Sitzung:

  • Das Verhalten ist unterschiedlich, je nachdem, ob die aktuelle Anforderung eine Sitzung geerbt hat, wodurch eine zu einer Sitzung gehörende Datenbankverbindung erworben wurde, oder ob eine sitzungslose Anforderung eine neue Sitzung instanziert hat. Wenn die Anforderung als sitzungslose Anforderung begonnen hat, findet sofort eine Sitzungslöschung oder -erstellung statt. Wenn die Anforderung eine Sitzung geerbt hat, erfolgt eine Änderung im Sitzungsstatus, wie etwa das Löschen der Sitzung oder das Ändern der SessionID erst nach Beenden der Anforderung und der Festschreibung ihrer Änderungen. Der Unterschied im Verhalten bezieht sich auf die Verarbeitung von Anomalien, die auftreten können, wenn der Client gleichzeitige Anforderungen stellt und dabei die gleiche SessionID verwendet.

  • Das Ändern der Sitzungs-ID in den SessionID-Wert der aktuellen Sitzung (ohne laufende Sitzung) ist kein Fehler und hat keine substanzielle Auswirkung.

  • Das Ändern der Sitzungs-ID in den SessionID-Wert, der von einer anderen HTTP-Anforderung verwendet wird, führt zu einem Fehler.

  • Das Ändern einer Sitzung, wenn eine Änderung bereits wartet, führt dazu, dass die laufende Sitzung gelöscht und eine neue laufende Sitzung erstellt wird. Die laufende Sitzung wird erst dann aktiviert, wenn die Anforderung erfolgreich beendet wurde.

  • Ein Ändern einer Sitzung mit einer laufenden Sitzung zurück in ihre ursprüngliche SessionID führt dazu, dass die laufende Sitzung ohne jegliche Änderung an der aktuellen Sitzung gelöscht wird.

 Siehe auch