我有两个在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
它也有不同的创作时间。
任何想法我做错了什么?
答案 0 :(得分:1)
这两个值都有两个不同的东西。
JSESSIONID=BF5C58B08062C84C648BA4DBE3A776BE
SESSIONID=03A85C79914839E4F6D60B343B3535C4
JSessionId
和SessionId
两者不相同。
sessionId
String
Servlet
为每个HttpSession
个JsessioId
容器定义的唯一cookie
。
另一方面,URL
是跟踪参数,可以在Servlet
或request.getSession()
由request.getSession(true)
API提供。在创建会话时定义了哪个。因此,当您致电JSessionId
或String
时,会话会被创建,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}}。