【问题标题】:Why does Tomcat not retrieve my session properly?为什么 Tomcat 不能正确检索我的会话?
【发布时间】:2015-09-29 00:15:00
【问题描述】:

我有两个 Java 应用程序在 Tomcat 上作为 servlet 运行。

应用程序 A 在另一个应用程序 B 上创建会话。然后应用程序 A 使用会话 cookie 登录到应用程序 B。此 cookie 存储在会话变量中并用于后续登录:

HttpSession session = request.getSession(false);
String cookieValue = session.getAttribute(sessionAttributeName);
HttpHeaders headers = new HttpHeaders();
headers.add("Cookie", cookieValue);
restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers), ProviderCostTOErrorWrapper.class);

这很好用。但我需要能够使用 REST 客户端(我使用 PostMan)登录到应用程序 B。

所以我创建了一个服务来获取存储在应用程序 A 会话中的应用程序 B 的会话 cookie。它看起来像这样:

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE; Path=/treatment/; HttpOnly

但是当我登录到应用程序 b 并检查会话对象时,它有一个完全不同的 id:

03A85C79914839E4F6D60B343B3535C4

它也有不同的创建时间。

任何想法我做错了什么?

【问题讨论】:

    标签: java session tomcat http-headers


    【解决方案1】:

    这两个值都有两个不同的东西。

    JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE
    SESSIONID=03A85C79914839E4F6D60B343B3535C4

    JSessionIdSessionId 两者都不相同。

    您认为sessionId 是唯一的String,由Servlet 容器为每个HttpSession 定义。

    另一方面,JsessioId 是跟踪参数,可以通过Servlet API 在cookieURL 中提供。这是在创建会话时定义的。因此,当您调用request.getSession()request.getSession(true) 时,将创建会话并将JSessionId 存储在cookie 中。

    HttpSession#getId() 返回为特定 HttpSession 定义的唯一 String

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多