第五十二章 进程亲和性和状态感知模式(保留模式 1) - 启动状态感知模式
通过设置保留模式将会话标记为状态感知,如下所示:
java
Set %session.Preserve = 1
建议在表单的 OnPreHTTP
方法中将会话标记为状态感知:
java
<script language=objectscript method=OnPreHTTP arguments="" returntype=%Boolean>
Set %session.Preserve = 1
Quit 1
</script>
此处发出指令意味着 CSP
引擎可以在制定 HTTP
响应标头并将其分派到 Web
网关之前将会话 cookie
(或令牌)标记为状态感知。
OnPreHTTP
方法触发后,会话可以标记为状态感知,但在这种情况下,会话 cookie
/令牌已经制定。 CSP
引擎在响应页脚(在响应有效负载之后调度)中将保留 = 1
指令传递给 Web
网关,Web
网关将连接标记为私有并根据会话 ID
缓存该指令,以便它可以识别未修改的会话令牌当后续请求到达时作为状态感知。
如果在 OnPreHTTP
方法中将会话标记为状态感知,则 Web Gateway
无需缓存针对会话的转换,因为信息包含在有效驻留在客户端上的会话 cookie
/令牌中。
维护状态感知模式并响应错误
一旦会话被标记为状态感知并且 Web Gateway
已确认状态转换并将连接标记为专用,会话将在状态感知模式下透明地运行,直到发生以下事件之一:
- 应用程序转换回无状态操作模式。
- 应用程序以编程方式结束会话或会话超时。
- 由于某些错误情况,专用连接提前关闭。
如果托管状态感知应用程序的专用连接过早关闭(可能是由于错误情况),Web Gateway
会将请求路由到池中的空闲无状态连接,并返回 IRIS
错误号 5974
:
java
CSP error occurred
Error: The persistent session is no longer available because the server process does not exist
ErrorNo: 5974
CSP Page: /csp/samples/loop.csp
Namespace: %SYS
Class: <Unknown>
此时,请求正在无状态模式下运行,应用程序有责任响应此错误:例如,将用户引导回应用程序的登录表单。
在状态感知模式下操作时,应在每个页面中检查 %session.NewSession
的值。或者,当用户首次被授权访问应用程序时,应用程序应检查存储在 %session.Data
中的用户特定身份验证数据的有效性。出于安全原因并确保用户会话仍然安全地锁定在状态感知操作模式中,这些检查非常重要。在这些情况下不会自动引发错误条件,因为会话可能已经(并且合法地)从状态感知模式转换出来。例如,考虑传入会话令牌仍标记为状态感知但应用程序已转换为无状态模式的情况 - 这种情况是由于会话令牌嵌入到所提供的表单(如 CSPCHD
)中而出现的在进行转换之前。
最后请记住,当会话终止时(例如,超时后),CSP
引擎将删除与该会话关联的所有操作数据,此后对该会话的任何进一步传入请求都将被视为针对某个会话。新会议。
IRIS
为 Web
应用程序提供的嵌入式安全机制可针对上述意外情况提供保护。在状态感知应用程序内发生连续性丢失的所有情况下,用户都会自动定向到登录表单(相对于 IRIS
流程)。
终止状态感知模式
应用程序可以通过设置保留模式来恢复到无状态操作模式,如下所示:
java
Set %session.Preserve = 0
建议在表单的 OnPreHTTP
方法中执行此代码:
java
<script language=objectscript method=OnPreHTTP arguments="" returntype=%Boolean>
Set %session.Preserve = 0
Quit 1
</script>
此处发出指令意味着 CSP
引擎可以在制定 HTTP
响应标头并将其分派到 Web
网关之前将会话 cookie
(或令牌)标记为无状态。
会话可以立即终止,如下所示:
java
Set %session.EndSession = 1
设置此属性后,会话将在处理当前请求后立即终止。
可以将会话设置为超时,如下所示:
java
Set %session.AppTimeout = 900
会话在规定的不活动秒数后超时并终止。默认值为 900
秒(15
分钟)。