【问题标题】:Apex Session IsolationApex 会话隔离
【发布时间】:2018-04-02 19:35:48
【问题描述】:

我有这个问题:

我使用“APEX_CLONE_SESSION”在同一个浏览器中拥有多个独立会话。它可以工作,但是当用户创建一个新的主会话时,所有其他以前的会话都已过期。

示例:我有一些在新会话中启动应用程序的初始页面,在此页面中我有一个包含链接列的报告。此链接列使用“APEX_CLONE_SESSION”启动一个新的表单页面会话。我可以多次这样做并且有效。所以,目前,我有初始页面报告和具有独立会话的多个表单页面。

当用户出于某种原因在某处单击启动新的初始页面时启动新的主会话时,问题就开始了。发生这种情况时,之前的所有会话都将过期。

在创建新的主会话时,是否仍然保留由“APEX_CLONE_SESSION”创建的会话?

感谢您的帮助。

【问题讨论】:

  • 定义“用户启动一个新的主会话”——这是打开一个没有会话 ID 的 URL 吗?
  • 是的,Scott,当用户打开一个没有会话 ID 的 url 时,主会话就会启动。
  • 这与不使用克隆会话的行为相同。您至少需要阻止用户在应用程序中自然地执行此操作。

标签: oracle-apex oracle-apex-5 oracle-apex-5.1


【解决方案1】:

正如 Joel Kallman 在他的博文评论中所说,使用 APEX_CLONE_SESSION 创建的所有会话共享同一个 cookie,因此当一个会话无效时,所有其他会话也将无效。

查看更多:http://joelkallman.blogspot.com.br/2016/07/apex-session-isolation-across-multiple.html

【讨论】:

  • 好的,谢谢。所以这个错误是预料之中的。而且没有办法解决或阻止这种应用程序的使用!?
  • 我想不会,因为 cookie 已失效。真的有必要在你的应用中使用多个会话吗?
  • 不是什么大问题,我只是想找到一种模式来解决这个问题。但是,系统仍然可以这样。这些情况只是偶尔发生。感谢您的帮助。
  • 您可以通过始终在为用户定义的链接中包含会话 ID 来解决此问题。
【解决方案2】:

目前我尝试这种方法来解决问题。

1 - 我创建了一个只有一个公共页面的应用程序。此页面功能仅用于重定向到我的目标应用程序。

2 - 在我的目标应用程序的初始页面中,我使用 localStorage 存储由 apex 生成的会话。

localStorage.setItem('myappsession','&APP_SESSION.');

3 - 在我的用户界面中,我将“主页 URL”定义为我的公共页面的 url。

4 - 此公共页面从 localStorage 获取会话值并重定向到我的目标应用程序。

5 - 我将重定向到我的目标应用程序的代码放在公共页面的标题上,所以这个动作在第一时间发生,用户看不到任何区别。

<script>

var session = localStorage.getItem('myappsession');
if (session == null) {
    session = 0;
}

location.href = 'f?p=appalias:startpage:' + session;

</script>

【讨论】:

  • 优秀的解决方案。我会尝试类似的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2014-06-28
  • 2014-10-05
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多