HTTP 请求创建的会话会立即实例化,以便该会话将需要该会话上下文的任何后续 HTTP 请求进行排队。
在本例中,本地主机客户端可以访问会话,其指定的会话 ID 为 session_63315422814117,运行于数据库 dbname 中,且当会话在服务器上用 sa_set_http_option 过程被创建后会用下列 URL 运行 session_service 服务。有关 sa_set_http_option 过程的详细信息,请参见sa_set_http_option 系统过程。
http://localhost/dbname/session_service?sessionid=session_63315422814117 |
Web 应用程序可能需要一种用于跟踪 HTTP Web 服务器内活动会话使用情况的方法。使用 NEXT_CONNECTION 函数调用遍历活动数据库连接,并检查与会话相关的属性(如 SessionID)即可找到会话数据。有关 NEXT_CONNECTION 函数的详细信息,请参见NEXT_CONNECTION 函数 [System]。
以下 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 请求提供服务,则将对该请求设置删除标记,并向连接发送一个取消信号以终止该请求。当请求终止时,会话即被删除,并且连接关闭。删除该会话会导致该会话队列上的待执行请求进行重新排队。有关详细信息,请参见删除 HTTP 会话或更改会话 ID。
如果连接当前处于非活动状态,则对会话设置删除标记,并将其重新排队为会话超时队列的起点。在下一个超时周期中(通常在 5 秒内)将删除该会话和连接。新 HTTP 请求不可以使用具有删除标记的任何会话。
如果数据库停止,所有的会话都将丢失。
有关数据库上下文中会话的详细信息,请参见创建 HTTP 会话中对会话密钥的说明。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |