【问题标题】:How do we get back a specific session using sessionId?我们如何使用 sessionId 取回特定会话?
【发布时间】:2009-03-31 05:32:31
【问题描述】:

我从事一项涉及从一个应用程序移动/遍历到另一个应用程序的任务。这些应用程序位于不同的 JVM 中。

在遍历另一个应用程序时,我会跟踪会话 ID。但是,当我来回遍历时,会创建一个新会话。当我从子应用程序导航回父应用程序时,有什么方法可以让我使用我保留的 sessionId 返回相同的会话?

环境:J2EE 和 WebSphere。

【问题讨论】:

    标签: java session jakarta-ee websphere


    【解决方案1】:

    正如 Mork0075 所述,sessionID 与 cookie 名称和服务器域相关联。如果您在不同的 JVM 上为两个应用程序使用相同的服务器域,我看到在应用程序之间切换时保持会话的两个选项:

    远景: 1) 如果您将数据库用于会话复制目的,您可以为两个应用程序使用相同的数据库,并且两个应用程序都可以使用 sessionID。我在这里看到的一个问题是会话中的对象可能在双方都不可用,因为代码会不同等。除非您在双方都维护代码等,否则它们可能会破坏对方的会话对象对象可用。

    可能的可能性: 2) 在两个应用程序之一的会话中使用不同的 cookie 名称。默认情况下,会话使用 JSESSIONID 作为 cookie,当您切换到第二个应用程序时,它会尝试根据该 cookie 名称查找会话但找不到。因此,它会创建一个新的 sessionID 并将其发送回浏览器,从而导致您的 sessionID 发生更改,并且在您切换回原始应用程序时不可用。但是,如果您将第二个应用程序的 sessionID 更改为其他内容(例如 JSESSIONID2),您的浏览器最终会得到两个有效的 sessionID,每个 sessionID 在其正确的应用程序上都是有效的。您可以通过应用服务器的会话管理->启用cookies页面下的管理控制台更改名称。

    【讨论】:

      【解决方案2】:

      我不确定这是否有帮助,但在 ONE 应用程序场景中,您将在每个响应中提交一个 sessionID,将其保存在 URL、cookie 或隐藏字段中。通过向服务器提交一个新请求,同时也提交了 sessionID,以便在服务器端进行解析。据我了解,从一个应用程序切换到另一种意味着您必须在应用程序中向用户提供 sessionID。如果将 sessionID 保存在 cookie 中,这可能是不可能的,因为 cookie 仅限于某个服务器域。所以请确保会话仍然有效,并且在返回应用程序启动后 sessionID 存在。

      【讨论】:

        【解决方案3】:

        您不必手动执行此操作。大多数应用服务器都支持单点登录 (SSO),因此您可以登录到一个应用程序并访问同一 SSO 域中的所有应用程序。应用服务器将跟踪会话 ID,并将它们链接到特定于 Web 应用的 HTTPSession 对象。

        http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.base.doc/info/aes/ae/csec_sso.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-10
          • 2011-05-19
          • 1970-01-01
          • 1970-01-01
          • 2019-05-21
          • 2011-10-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多