简短版:
如果函数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”函数返回true,所以我假设会话有效。但是在我删除APEX会话cookie之前没有任何作用。然后我可以轻松地重新登录。
是否有人知道是否有另一个电话会告诉我会话是否已过期?
由于
答案 0 :(得分:1)
您可以在应用程序安全属性页面下设置最大会话长度(以秒为单位)。
Apex声明如下:
“会话持续时间可能会被每八小时运行一次的作业所取代,这会删除超过12小时的会话。”
您可以使用视图apex_040100.APEX_WORKSPACE_SESSIONS
根据其存在或创建时间确定会话是否有效。例如:session_created - systdate > 12Hours
。
您还应该使用“会话超时直接指向此网址”属性。
答案 1 :(得分:0)
此解决方案将需要特权访问,但是您可以在顶点架构中查询wwv_flow_sessions $视图以查找与您的用户名匹配的任何会话。如果不存在,则您的会话已超时。该视图还为您提供了一个字段“ idle_timeout_on”,该字段将告诉您会话安排何时超时。