1

精简版:

如果函数 wwv_flow_custom_auth_std.is_session_valid(或 apex_custom_auth_std.is_session_valid)返回 TRUE,会话是否可能已过期但仍然存在?如果是这样,您如何检查会话是否已过期?

长版:

我为我们的 Oracle APEX 应用程序创建了一个单点登录系统,大致基于本教程:

http://www.oracle.com/technology/oramag/oracle/09-may/o39security.html

唯一的区别是我的主 SSO 登录是在 Perl 中,而不是在另一个 APEX 应用程序中。它设置了一个 SSO cookie,应用程序可以通过数据库过程检查它是否有效。

我注意到,当我早上到达时,整个系统都不起作用。我从 APEX 应用程序重新加载了一个页面,然后它将我发送到 SSO 页面,因为会话已过期,我登录并重定向回我原来的 APEX 应用程序页面。这通常有效,除了早上的第一件事。APEX 会话似乎已过期。在那种情况下,它似乎找到了会话,但随后拒绝使用它,并将我送回登录页面。

我已尽力追踪问题。“wwv_flow_custom_auth_std.is_session_valid”函数返回真,所以我假设会话是有效的。但是在我删除 APEX 会话 cookie 之前没有任何效果。然后我可以轻松地重新登录。

有人知道是否有另一个电话会告诉我会话是否过期?

谢谢

4

2 回答 2

1

您可以在应用程序安全属性页面下设置最大会话长度(以秒为单位)。

Apex 声明如下:

“会话持续时间可能会被每八小时运行一次的作业操作所取代,该作业会删除超过 12 小时的会话。”

您可以使用视图apex_040100.APEX_WORKSPACE_SESSIONS根据会话的存在或创建时间来确定会话是否有效。例如:session_created - systdate > 12Hours

您还应该使用“直接到此 URL 的会话超时”属性。

于 2014-01-13T01:50:43.707 回答
0

此解决方案需要特权访问,但您可以在 apex 架构中查询 wwv_flow_sessions$ 视图以查找与您的用户名匹配的任何会话。如果不存在,则您的会话已超时。此视图还为您提供了一个字段“idle_timeout_on”,它将告诉您的会话何时计划超时。

于 2019-04-17T20:32:09.190 回答