Session 在Oracle APEX 19.2中禁用每个用户的多个会话

Session 在Oracle APEX 19.2中禁用每个用户的多个会话,session,oracle-apex,oracle-apex-19.1,Session,Oracle Apex,Oracle Apex 19.1,我需要配置APEX 19.2(在Tomcat中工作)以允许用户同时只在一个会话上工作,并且只在一个选项卡上工作(在Google Chrome和Edge中) 现在,当我在Chrome上工作时,我可以打开Edge并创建新会话,并且可以同时使用这两个会话 使用“为所有会话启用”值的“重新加入会话”属性在两种浏览器中都不起作用。我也很好奇为什么要这样做。请记住,您实施的解决方案将影响用户体验 以下是基于Koen上述评论的一个解决方案: 这实际上是我给想要实现这一点的人的第一个解决方案。然而,我后来了解到

我需要配置APEX 19.2(在Tomcat中工作)以允许用户同时只在一个会话上工作,并且只在一个选项卡上工作(在Google Chrome和Edge中)

现在,当我在Chrome上工作时,我可以打开Edge并创建新会话,并且可以同时使用这两个会话


使用“为所有会话启用”值的“重新加入会话”属性在两种浏览器中都不起作用。

我也很好奇为什么要这样做。请记住,您实施的解决方案将影响用户体验

以下是基于Koen上述评论的一个解决方案:

这实际上是我给想要实现这一点的人的第一个解决方案。然而,我后来了解到它们在旧版本的APEX上,所以我将答案更新为需要自定义表的答案。如果您愿意,也可以查看该版本

该解决方案的优点是易于实现。但是,对于最终用户来说更糟糕的是,他们可能会在上一个会话中丢失一些工作,例如,如果他们返回到上一个会话并提交一个包含数据的表单页面,但它只将他们带到登录页面,而不保存他们的工作

一个更难实现但对用户可能更好的解决方案是使用基于Ajax的ping,并将其记录在自定义表中。这可以告诉您哪个会话是用户的“活动会话”。当你在N秒后没有看到ping时,你可能会认为它已经过时了,并允许一个新的登录来杀死它。 更进一步说,您可能有这样的逻辑,即如果活动会话在x和y秒之间过时,则提示用户是否要终止上一个会话


正如您所看到的,您为用户做的越多,您需要自己投入的精力就越多。

这两种浏览器使用单独的cookie存储和缓存;它们不共享会话信息,所以我不知道如何跨浏览器执行此操作(重新加入会话)。另外请注意,出于安全原因,Oracle不建议使用重新加入会话,除非您还实现了工作区隔离。在您观察时生成新会话实际上是有意的,以防止会话劫持。当用户尝试打开新会话时(在匿名或其他浏览器中),您需要什么功能。您可以通过在新会话应用程序上运行使用户的其他会话过期的进程来强制其他会话过期。在apex_视图中检查用户的会话,并使用apex_SESSION.DELETE_SESSION api为用户清理任何其他会话。总之,您建议我在新会话上创建一个流程,该流程应删除用户拥有的所有其他会话?为什么要这样做?你的目标是什么?