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

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere-Webdienste » HTTP-Sitzungen verwenden

 

Sitzungs-ID löschen oder ändern

Sie können die Sitzungs-ID auf einen anderen Wert setzen, indem Sie die Systemprozedur sa_set_http_option mit einem neuen SessionID-Wert aufrufen. Das Ändern der Sitzungs-ID bewirkt, dass die alte Sitzung gelöscht und eine neue Sitzung erstellt wird. Diese verwendet jedoch die aktuelle Datenbankverbindung, sodass keine Statusinformationen verloren gehen. Eine SessionID kann auf NULL (oder die leere Zeichenfolge) gesetzt werden. Dadurch wird die Sitzung gelöscht. Es ist nicht möglich, eine SessionID auf eine ID einer vorhandenen Sitzung festzulegen (wenn die Sitzung auf ihre eigene SessionID gesetzt wird, passiert nichts). Wenn versucht wird, SessionID auf den Wert einer vorhandenen Sitzung festzulegen, wird der Fehler "Ungültige Einstellung für HTTP-Option 'SessionID' SQLCODE=-939" ausgegeben.

Wenn ein Server eine größere Zahl von HTTP-Anforderungen mit demselben Sitzungskontext empfängt, platziert er diese Anforderungen in seine Sitzungswarteschlange (er serialisiert sie). Wenn der SessionID-Wert von einer (oder mehreren) Anforderungen geändert oder gelöscht wird, werden die ausstehenden Anforderungen in der Sitzungswarteschlange als einzelne HTTP-Anforderungen in eine neue Warteschlange gestellt. Keine HTTP-Anforderung kann die Sitzung mehr erhalten, da diese nicht mehr vorhanden ist. Eine HTTP-Anforderung, die eine Sitzung nicht erhält, wechselt standardmäßig in den sitzungslosen Modus und erstellt eine neue Datenbankverbindung. Die Webanwendung kann überprüfen, ob eine Anforderung innerhalb eines Sitzungskontexts arbeitet, indem sie feststellt, ob der Zeichenfolgenwert für die Verbindungseigenschaften SessionID oder SessionCreateTime nicht leer ist. Die Webanwendung kann natürlich den Status aller verwendeten anwendungsspezifischen Variablen oder temporären Tabellen überprüfen. Ein Beispiel:

IF VAREXISTS( 'state' ) = 0 THEN
    // first invocation by this connection
    CREATE VARIABLE state LONG VARCHAR;
END IF;