1

(顶点 4.1.1.00.23)

我有两个应用程序 A 和 B 共享同一个会话(因为它们使用相同的会话 cookie),并且每个应用程序的最大会话空闲时间都设置为相同的值 N。建立会话并访问两个应用程序后,如果我花更多的钱在应用程序 A 中工作超过 N 秒(执行大量页面加载,因此不会超时),如果我然后导航到应用程序 B,它会立即超时并将我发送到其登录页面。

我还尝试在两个应用程序中调用 APEX_UTIL.SET_SESSION_MAX_IDLE_SECONDS(N),p_scopr 默认为“SESSION”,注意到 API 文档说

当多个 Application Express 应用程序使用通用身份验证方案并设计为在通用会话中作为套件运行时,这将是最常见的用例。

然而同样的事情也会发生。

我希望超时适用于整个会话,而不是单独适用于每个应用程序。这不是上面应该实现的目标,还是我做错了什么?

4

1 回答 1

0

我从Oracle APEX 论坛上的 Christian Neumueller 那里得到了答案:

...在 4.2 中不再是问题。看4.1.1的代码,似乎问题在于我们如何存储最后一次访问时间。虽然具有 SESSION 范围的 APEX_UTIL 调用将为两个应用程序设置空闲超时,但我们为每个应用程序维护了一个计时器 (FSP_LAST_REQUEST_TIME)。在 TIMTEST1 中工作仅更新了 TIMETEST1 的计时器,而不是 TIMTEST2 的计时器。在使用一个应用程序并切换回另一个应用程序后,Apex 看到过时的计时器并确定会话已过期。这显然是一个错误。坏消息是反向移植是不可行的,因为会话状态管理发生了很大变化。

于 2013-01-16T16:30:39.773 回答