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 会话

 

会话语义

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

不以会话开头但已创建其会话上下文的 HTTP 请求是其会话的创建者。在其会话上下文中发生任何更改或删除时,创建者请求可立即更改或删除该会话上下文。在会话上下文中开始的 HTTP 请求还可更改或删除其会话。对其会话的更改会立即创建一个完全可操作的待执行会话,只不过另一个 HTTP 请求无法取得所有权(而某个需要待执行会话的进来请求将代为在该会话上排队)。总而言之,更改或删除创建者请求的会话会立即修改当前会话上下文,而仅更改其会话的请求会修改它的待执行会话。HTTP 请求完成时,会检查自己是否具有待执行会话。如果存在待执行会话,则它将删除其当前会话并替换为待执行会话。被会话高速缓存的数据库连接会高效移动到新的会话上下文,且会保留所有状态数据(如临时表和创建的变量)。

无论在什么情况下,只要删除了 HTTP 会话,就会释放其队列中的任何请求,并允许这些请求在没有会话上下文的情况下执行。要求请求在会话上下文中运行的应用程序代码必须尝试通过调用 CONNECTION_PROPERTY('SessionID') 来获得一个有效的会话上下文。

DECLARE ses_id LONG VARCHAR;
SELECT CONNECTION_PROPERTY( 'SessionID' ) INTO ses_id;

如果某 HTTP 请求被故意取消或由于网络故障而取消,则会删除现有的待执行会话并保留原始会话上下文。创建者 HTTP 请求(无论是被取消还是正常终止)会立即更改会话状态。