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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 编程 » HTTP Web 服务 » 将 SQL Anywhere 用作 HTTP Web 服务器 » 在 HTTP Web 服务器中开发 Web 服务应用程序 » 在 HTTP 服务器上管理 HTTP 会话

 

HTTP 会话管理

HTTP 请求创建的会话会立即实例化,以便该会话将需要该会话上下文的任何后续 HTTP 请求进行排队。

在本例中,本地主机客户端可以访问会话,其指定的会话 ID 为 session_63315422814117,运行于数据库 dbname 中,且当会话在服务器上用 sa_set_http_option 过程被创建后会用下列 URL 运行 session_service 服务。

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

Web 应用程序可能需要一种用于跟踪 HTTP Web 服务器内活动会话使用情况的方法。使用 NEXT_CONNECTION 函数调用遍历活动数据库连接,并检查与会话相关的属性(如 SessionID)即可找到会话数据。

以下 SQL 语句将说明如何跟踪活动会话:



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';

如果查看数据库服务器消息窗口,会看到类似以下输出的数据:

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

显式删除属于某会话的连接会导致连接关闭并删除该会话。如果要被删除的连接当前正用于为 HTTP 请求提供服务,则将对该请求设置删除标记,并向连接发送一个取消信号以终止该请求。当请求终止时,会话即被删除,并且连接关闭。删除该会话会导致该会话队列上的待执行请求进行重新排队。

如果连接当前处于非活动状态,则对会话设置删除标记,并将其重新排队为会话超时队列的起点。在下一个超时周期中(通常在 5 秒内)将删除该会话和连接。新 HTTP 请求不可以使用具有删除标记的任何会话。

如果数据库停止,所有的会话都将丢失。

 另请参见