【问题标题】:Redirected to second app but jsessionid is same as that of first app重定向到第二个应用,但 jsessionid 与第一个应用相同
【发布时间】:2016-05-31 08:35:01
【问题描述】:

我正在处理一个用例,我必须在部署在不同服务器上的 JSF 应用程序之间进行重定向。有点登录应用程序到主 web 应用程序。最初,我将这两个应用程序部署在同一台服务器上,并在同一域 (localhost) 下运行它们。

这两个应用程序是:应用程序 A(登录门户)和应用程序 B。应用程序 A 在根上下文中运行,例如http://localhost:8080/ 和 App B 在上下文 /app 例如http://localhost:8080/app/。当我通过普通的POST 提交请求从应用程序 A 重定向(登录后)到应用程序 B 时,应用程序 B 在同一浏览器选项卡下启动。在检查会话 id cookie 时,我看到 App B 虽然属于不同的部署,但与 App A 共享相同的会话 id。cookie 显示存储在路径 / 下的相同会话 id。启动 App B 后,我期待一个新的会话。正常吗,我需要明确创建一个新会话吗?还是因为我在同一台服务器上部署了两个应用程序战争文件localhost:8080

【问题讨论】:

  • 你有没有尝试过这样的事情:stackoverflow.com/questions/9436736/…?
  • 我可以通过 POST 类型的 HTML 表单 <form>...</form> 通过我的 JSF 页面中的 JSF 按钮提交重定向到 App B。除了会话之外,我不是想在应用程序 A 和应用程序 B 之间共享会话。否则我想要它。我希望每个应用程序都应该在自己的上下文中拥有自己不同的独立会话。重定向到 App B 后,我看到 App B 具有相同的会话 ID。我需要在新会话中启动 App B。
  • 第二个链接显示了如何将会话 ID cookie 范围从 / 更改为其他任何位置。无论如何,正如您在问题中所评论的那样,如果这些应用程序可以在单独的服务器上运行,您无需担心。您还可以在重定向到第二个应用程序之前使第一个应用程序的会话无效。
  • 我想知道在同一服务器上部署这两个应用程序是否会导致用户的两个应用程序的会话 ID 相同。

标签: session servlets jsf-2 session-state


【解决方案1】:

是的,JSESSIONID 将是相同的,因为这两个应用程序都由同一个 servlet 容器提供服务并与同一个浏览器实例进行交互。两个应用都在使用同一个HTTPSession

如需深入了解,请查看 HTTPSession 部分下的阅读内容:How do servlets work? Instantiation, shared variables and multithreading

顺便说一下,两个不同的浏览器会访问不同的会话。每个人都将使用新的会话 cookie 访问服务器,因此从服务器获得一个新的 HTTPSession。鉴于您在同一个浏览器中启动这两个应用程序(即使使用同一浏览器的单独选项卡/窗口),会话 cookie 将保持不变,因此访问相同的 HTTPSession。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多