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-Sitzungsadministration

Eine von einer HTTP-Anforderung erstellte Sitzung wird immer sofort instanziert, sodass alle nachfolgenden HTTP-Anforderungen, die diesen Sitzungskontext erfordern, von der Sitzung in eine Warteschlange gestellt werden.

In diesem Beispiel kann ein lokaler Hostclient auf die Sitzung mit der angegebenen Sitzungs-ID, session_63315422814117, zugreifen, die innerhalb der Datenbank, DB-Name, die ihrerseits den Dienst session_service mit der folgenden URL ausführt, sobald die Sitzung auf dem Server mit der Prozedur sa_set_http_option erstellt wurde.

http://localhost/dbname/session_service?sessionid=session_63315422814117

Eine Webanwendung kann eine Möglichkeit zur Verfolgung der Nutzung der aktiven Sitzung auf dem HTTP-Webserver erfordern. Sitzungsdaten können mit dem Funktionsaufruf NEXT_CONNECTION gefunden werden, der die aktiven Datenbankverbindungen durchläuft und sitzungsbezogene Eigenschaften, wie etwa SessionID, überprüft.

Die folgenden SQL-Anweisungen zeigen die Verfolgung einer aktiven Sitzung:



CREATE VARIABLE conn_id LONG VARCHAR;
CREATE VARIABLE the_sessionID LONG VARCHAR;
SELECT NEXT_CONNECTION( NULL, NULL ) INTO conn_id;
conn_loop:
    LOOP
        IF conn_id IS NULL THEN
            LEAVE conn_loop;
        END IF;
        SELECT CONNECTION_PROPERTY( 'SessionID', conn_id ) 
            INTO the_sessionID;
        IF the_sessionID != '' THEN
            PRINT 'conn_id = %1!, SessionID = %2!', conn_id, the_sessionID;
        ELSE
            PRINT 'conn_id = %1!', conn_id;
        END IF;
        SELECT NEXT_CONNECTION( conn_id, NULL ) INTO conn_id;
    END LOOP conn_loop;
    PRINT '\n';

Wenn Sie das Fenster "Datenbankservermeldungen" betrachten, sehen Sie Daten, die der folgenden Ausgabe ähneln:

conn_id = 30
conn_id = 29, SessionID = session_63315442223323
conn_id = 28, SessionID = session_63315442220088
conn_id = 25, SessionID = session_63315441867629

Das explizite Löschen einer Verbindung, die einer Sitzung gehört, führt dazu, dass die Verbindung geschlossen und die Sitzung gelöscht wird. Wenn die zu löschende Sitzung aktuell aktiv ist und eine HTTP-Anforderung bedient, wird die Anforderung für die Löschung markiert und sie erhält ein Abbruchsignal zum Beenden der Anforderung. Wenn die Anforderung beendet wird, wird die Sitzung gelöscht und die Verbindung geschlossen. Das Löschen einer Sitzung kann dazu führen, dass ausstehende Anforderungen in der Warteschlange der betreffenden Sitzung in eine neue Warteschlange gestellt werden.

Falls die Verbindung aktuell nicht aktiv ist, wird die Sitzung für die Löschung markiert und an den Anfang der Warteschlange für Sitzungszeitüberschreitung gestellt. Die Sitzung und die Verbindung werden beim nächsten Zeitüberschreitungszyklus gelöscht (normalerweise innerhalb von 5 Sekunden). Für die Löschung markierte Sitzungen können von keiner neuen HTTP-Anforderung verwendet werden.

Alle Sitzungen gehen verloren, wenn die Datenbank gestoppt wird.

 Siehe auch