为什么Tomcat无法正确检索我的会话?

时间:2015-09-29 00:15:00

标签: java session tomcat http-headers

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

应用程序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);

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

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

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE; Path=/treatment/; HttpOnly

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

03A85C79914839E4F6D60B343B3535C4

它也有不同的创作时间。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

  

JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE
  SESSIONID=03A85C79914839E4F6D60B343B3535C4

JSessionIdSessionId两者不相同。

sessionId String Servlet为每个HttpSessionJsessioId容器定义的唯一cookie

另一方面,URL是跟踪参数,可以在Servletrequest.getSession()request.getSession(true) API提供。在创建会话时定义了哪个。因此,当您致电JSessionIdString时,会话会被创建,HttpSession将存储在Cookie中。

HttpSession#getId()返回为该特定-(void)getUserRecordID { CKContainer *defaultContainer =[CKContainer defaultContainer]; [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) { if (!error) { [defaultContainer fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) { self.userRecordID = recordID; NSLog(@"user record id: %@",recordID); [self getUserRecord]; }]; } else { NSLog(@"error: %@",error.localizedDescription); } }]; } -(void)getUserRecord { CKContainer *defaultContainer =[CKContainer defaultContainer]; CKDatabase *publicDatabase = defaultContainer.publicCloudDatabase; [publicDatabase fetchRecordWithID:self.userRecordID completionHandler:^(CKRecord *userRecord, NSError *error) { if (!error) { NSLog(@"current coins: %@",userRecord); } else { NSLog(@"error: %@",error.localizedDescription); } }]; } 定义的唯一{{1}}。