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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere Web 服务 » 使用 HTTP 会话

 

删除或更改会话 ID

可通过使用新 SessionID 值调用 sa_set_http_option 系统过程将会话 ID 重设为另一个值。更改会话 ID 后将会删除旧会话并创建一个新会话,但它会重新使用当前的数据库连接,以便状态信息不会丢失。SessionID 可被设置为 NULL(或者空字符串),这样将会删除会话。不可将 SessionID 设置为现有会话的 ID(除了它自己的会话 ID,这样不会发生任何问题)。尝试将 SessionID 设置为现有会话的会话 ID 将会导致 "HTTP 选项 'SessionID' 的设置无效 SQLCODE=-939" 错误。

如果服务器接收到一连串指定同一个会话上下文的多个 HTTP 请求,则它会在其会话队列上将这些请求排队(序列化)。如果 SessionID 被其中一个(或多个)请求更改或删除,则会话队列中的任何待执行请求都会作为单个 HTTP 请求进行重新排队。每个 HTTP 请求都将无法获得该会话,因为它已不再存在。无法获得会话的 HTTP 请求在缺省情况下被视为无会话操作,并且会新建一个数据库连接。Web 应用程序可通过检查 SessionID 或 SessionCreateTime 连接属性的非空字符串值来验证请求是否在会话上下文中进行操作。当然,Web 应用程序可检查它使用的任何应用程序特定变量或临时表的状态。下面是一个示例:

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