Skip to content

Commit b3875b7

Browse files
committed
Look at all cookies instead just the first
Previous to this commit, just the first cookie is considered. Now, all cookies are considered to look for SESSION cookie. See spring-projectsgh-275
1 parent 0907423 commit b3875b7

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

spring-session/src/main/java/org/springframework/session/web/http/CookieHttpSessionStrategy.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136
*
137137
*
138138
* @author Rob Winch
139+
* @author Eddú Meléndez
139140
* @since 1.0
140141
*/
141142
public final class CookieHttpSessionStrategy
@@ -335,22 +336,21 @@ public void setSerializationDelimiter(String delimiter) {
335336

336337
public Map<String, String> getSessionIds(HttpServletRequest request) {
337338
List<String> cookieValues = this.cookieSerializer.readCookieValues(request);
338-
String sessionCookieValue = cookieValues.isEmpty() ? ""
339-
: cookieValues.iterator().next();
340339
Map<String, String> result = new LinkedHashMap<String, String>();
341-
StringTokenizer tokens = new StringTokenizer(sessionCookieValue,
342-
this.deserializationDelimiter);
343-
if (tokens.countTokens() == 1) {
344-
result.put(DEFAULT_ALIAS, tokens.nextToken());
345-
return result;
346-
}
347-
while (tokens.hasMoreTokens()) {
348-
String alias = tokens.nextToken();
349-
if (!tokens.hasMoreTokens()) {
350-
break;
340+
for (String cookieValue : cookieValues) {
341+
StringTokenizer tokens = new StringTokenizer(cookieValue, this.deserializationDelimiter);
342+
if (tokens.countTokens() == 1) {
343+
result.put(DEFAULT_ALIAS, tokens.nextToken());
344+
return result;
345+
}
346+
while (tokens.hasMoreTokens()) {
347+
String alias = tokens.nextToken();
348+
if (!tokens.hasMoreTokens()) {
349+
break;
350+
}
351+
String id = tokens.nextToken();
352+
result.put(alias, id);
351353
}
352-
String id = tokens.nextToken();
353-
result.put(alias, id);
354354
}
355355
return result;
356356
}

spring-session/src/test/java/org/springframework/session/web/http/CookieHttpSessionStrategyTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,17 @@ public void getSessionIdsDangling() {
561561
assertThat(sessionIds.get("1")).isEqualTo("b");
562562
}
563563

564+
@Test
565+
public void getSessionIdsMultiCookies() {
566+
setSessionCookies(new Cookie(this.cookieName, "0 a"),
567+
new Cookie("OTHER_COOKIE", "1 b"), new Cookie(this.cookieName, "2 c"));
568+
569+
Map<String, String> sessionIds = this.strategy.getSessionIds(this.request);
570+
assertThat(sessionIds.size()).isEqualTo(2);
571+
assertThat(sessionIds.get("0")).isEqualTo("a");
572+
assertThat(sessionIds.get("2")).isEqualTo("c");
573+
}
574+
564575
// --- helper
565576

566577
@Test
@@ -735,6 +746,10 @@ public void setSessionCookie(String value) {
735746
this.request.setCookies(new Cookie(this.cookieName, value));
736747
}
737748

749+
public void setSessionCookies(Cookie... cookies) {
750+
this.request.setCookies(cookies);
751+
}
752+
738753
public String getSessionId() {
739754
return this.response.getCookie(this.cookieName).getValue();
740755
}

0 commit comments

Comments
 (0)