Web 应用程序可以各种方式支持会话。在 HTML 窗体中的隐藏字段,可用于跨多个请求保存客户端/服务器数据。另外,Web 2.0 技术,如启用了 AJAX 的客户端 JavaScript,也可以基于客户端状态作出异步 HTTP 请求。SQL Anywhere 提供了额外的功能,可以保留数据库连接专供会话 HTTP 请求使用。
任何在 HTTP 会话内部创建和变更的连接范围变量和临时表都可以为指定了给定 SessionID 的后续 HTTP 请求所访问。SessionID 可以通过 GET 或 POST HTTP 请求方法指定,或在 HTTP Cookie 标头内指定。当 HTTP 请求与 SessionID 变量一起被接收时,服务器将检查其会话存储库以寻找匹配上下文。如果找到一个会话,服务器将使用它的数据库连接来处理请求。如果会话在使用中,服务器会将 HTTP 请求加入队列,并在会话被释放时激活它。
sa_set_http_option 可用于创建、删除和更改会话 ID。
HTTP 会话要求对管理会话标准进行特殊处理。一个给定的 SessionID 只能有一个数据库连接供其使用,所以向该 SessionID 发出的连续请求将被服务器序列化。一个给定 SessionID 的队列中最多可以有 16 个请求。如果会话队列已满,则随后向该
SessionID 发出的请求将用 503 Service Unavailable
状态拒绝掉。
第一次创建 SessionID 时,此 SessionID 将立即被系统注册。随后要修改或删除该 SessionID 的请求仅在给定 HTTP 请求终止后生效。如果请求处理结果导致回退,或如果应用程序删除或重置了该 SessionID,此方法可以促成一致的行为。
如果 HTTP 请求更改了 SessionID,当前的会话将被删除,并由待执行的会话替换。被会话高速缓存的数据库连接会高效移动到新的会话上下文,且会保留所有状态数据(如临时表和创建的变量)。
有关 HTTP 会话用法的完整示例,请参见 %SQLANYSAMP16%\SQLAnywhere\HTTP\session.sql。
应删除失效的会话,并应当设置适当的超时时间使未完成的连接数目降到最低,因为每个客户端应用程序连接都持有一个许可座席。与 HTTP 会话关联的连接在连接期间将维持它们对服务器数据库的持有。
有关 SQL Anywhere 授权的详细信息,请参见 http://www.sybase.com/detail?id=1056242。
如何创建 HTTP 会话
如何检测不活动的 HTTP 会话
如何删除 HTTP 会话或更改会话 ID
HTTP 会话管理
HTTP 会话错误代码
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |