显式删除在会话上下文中进行高速缓存处理的数据库连接会导致会话被删除。用这种方式删除会话是一种取消操作;从该会话队列中释放的所有请求都将进入取消状态。该行为确保任何等待会话的未处理请求都被终止。类似地,关闭服务器或数据库也会取消所有的数据库连接。
将 sa_set_http_option 系统过程中的 SessionID 选项设置为空值或空字符串可以删除会话。
以下代码可用于删除会话:
CALL sa_set_http_option( 'SessionID', null ); |
当 HTTP 会话被删除或 SessionID 出现变更,任何在会话队列中等待的待执行 HTTP 请求都将被释放,并允许脱离会话上下文。待处理的请求不会重新使用同样的数据库连接。
会话 ID 不能设置为已存在的会话 ID,如果 SessionID 发生变更,引用了旧 SessionID 的待处理请求将被释放并作为非会话的请求运行。引用了新 SessionID 的后续请求将重新使用旧 SessionID 实例化的相同数据库连接。
当删除或变更 HTTP 会话时,将应用下列条件:
行为是不同的,这取决于当前请求是否继承了会话而获得了属于会话的数据库连接,或者非会话请求是否实例化了新的会话。如果请求以非会话开始,则创建或删除会话的行为将立即发生。如果请求继承了会话,则会话状态中的变更,例如删除会话或改变 SessionID,只能在请求终止且其变更提交后发生。行为中的区别强调处理客户端使用同样的 SessionID 同时发出请求时可能发生的异常。
将会话更改为当前会话的 SessionID(没有待执行会话)不会出错,并且没有明显的影响。
将会话更改为另一个 HTTP 请求正在使用的 SessionID 会出错。
在某更改已为待执行状态时更改会话将导致待执行会话被删除,并创建新的待执行会话。待执行的会话只能在请求成功终止后激活。
将带有待执行会话的会话更改回其原始 SessionID 将导致待执行会话在没有被当前会话改变的情况下被删除。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |