https://issues.apache.org/bugzilla/show_bug.cgi?id=55266

            Bug ID: 55266
           Summary: Trailing slash redirect loses jsessionid attribute
           Product: Tomcat 6
           Version: 6.0.33
          Hardware: Macintosh
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: fsommer0...@googlemail.com

Created attachment 30594
  --> https://issues.apache.org/bugzilla/attachment.cgi?id=30594&action=edit
contains a maven project including tomcat6-plugin to package the webapp and run
tomcat using maven. This archive also includes a deployable war beneath /dist.

I'm using URL rewriting and recently upgraded my tomcat version from 6.0.32 to
6.0.33. I figured out that since 6.0.33 the jsessionid attribute is omitted in
the Location header when Tomcat forces a trailing slash redirect e.g. from
/mypath to /mypath/. The effect is that the session information is lost after
the redirect.

This pretty looks like the same as an old bug 'Bug 34749'
(https://issues.apache.org/bugzilla/show_bug.cgi?id=34749) in Tomcat 5.


Steps to reproduce:

1. Deploy the attached war to a Tomcat >= 6.0.33 or use 'mvn package
tomcat6:run' if you whish to use maven tomcat6 plugin.

2. Create a session by requesting a page 'createsession.jsp'. The response
shows a sessionid that is required for step three and four.
curl -v "http://localhost:8080/jsessionid-issue/createsession.jsp";


3. Append the jsessionid attribute to the uri
"http://localhost:8080/jsessionid-issue/";. Please note the slash at the end of
the path.
curl -Lv "http://localhost:8080/jsessionid-issue/;jsessionid=_id_";

The jsessionid is taken into account. The response shows that the session of
the requested sessionid has been used.

4. Now, request the same uri without the trailing slash:
'http://localhost:8080/jsessionid-issue;jsessionid=_id_'
curl -Lv "http://localhost:8080/jsessionid-issue;jsessionid=_id_";

First, the output shows a 302 redirect that is forced by tomcat. The location
header shows the uri 'http://localhost:8080/jsessionid-issue/' with a trailing
slash now but the jsessionid attribute is missing.
Accordingly, the response of the second request shows that no session has been
used.



Sample:

1. 'mvn package tomcat6:run'
15.07.2013 07:46:46 org.apache.catalina.startup.Embedded start
INFO: Starting tomcat server
15.07.2013 07:46:46 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.37
15.07.2013 07:46:47 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
15.07.2013 07:46:47 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080


2. curl -v "http://localhost:8080/jsessionid-issue/createsession.jsp";
* About to connect() to localhost port 8080 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 8080 (#0)
> GET /jsessionid-issue/createsession.jsp HTTP/1.1
> User-Agent: curl/7.28.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Type: text/html;charset=utf-8
< Content-Length: 92
< Date: Mon, 15 Jul 2013 06:22:11 GMT
< 

########################################
created session: 968F6BEC133C69A20EAFF0D2093F7A56
########################################


3. curl -Lv
"http://localhost:8080/jsessionid-issue/;jsessionid=968F6BEC133C69A20EAFF0D2093F7A56";
* About to connect() to localhost port 8080 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 8080 (#0)
> GET /jsessionid-issue/;jsessionid=968F6BEC133C69A20EAFF0D2093F7A56 HTTP/1.1
> User-Agent: curl/7.28.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Type: text/html;charset=utf-8
< Content-Length: 285
< Date: Mon, 15 Jul 2013 06:22:49 GMT
< 

########################################
http session: 968F6BEC133C69A20EAFF0D2093F7A56
getRequestURI: /jsessionid-issue/;jsessionid=968F6BEC133C69A20EAFF0D2093F7A56
getRequestedSessionId: 968F6BEC133C69A20EAFF0D2093F7A56
isRequestedSessionIdFromURL: true
isRequestedSessionIdValid: true
########################################


4. curl -Lv
"http://localhost:8080/jsessionid-issue;jsessionid=968F6BEC133C69A20EAFF0D2093F7A56";
* About to connect() to localhost port 8080 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 8080 (#0)
> GET /jsessionid-issue;jsessionid=968F6BEC133C69A20EAFF0D2093F7A56 HTTP/1.1
> User-Agent: curl/7.28.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 302 Found
< Server: Apache-Coyote/1.1
< Location: http://localhost:8080/jsessionid-issue/
< Transfer-Encoding: chunked
< Date: Mon, 15 Jul 2013 06:24:12 GMT
< 
* Ignoring the response-body
* Connection #0 to host localhost left intact
* Issue another request to this URL: 'http://localhost:8080/jsessionid-issue/'
* Re-using existing connection! (#0) with host localhost
* Connected to localhost (::1) port 8080 (#0)
> GET /jsessionid-issue/ HTTP/1.1
> User-Agent: curl/7.28.0
> Host: localhost:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< Content-Type: text/html;charset=utf-8
< Content-Length: 189
< Date: Mon, 15 Jul 2013 06:24:12 GMT
< 

########################################
http session is null
getRequestURI: /jsessionid-issue/
getRequestedSessionId: null
isRequestedSessionIdFromURL: false
isRequestedSessionIdValid: false
########################################

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to