I've been loosing cookies running Cocoon under Tomcat 4 and have tracked 
the problem down to the HTTP 1.0 Processor class.

The current code throws away any cookies after the first session id is 
found.

Here's a patch which aught to work:

> Index: 
> catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.java
> ===================================================================
> RCS file: /home/cvspublic/jakarta-
> tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.
> java,v
> retrieving revision 1.5
> diff -u -r1.5 HttpProcessor.java
> --- catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.
> java  2001/11/09 19:38:44     1.5
> +++ catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.
> java  2001/12/07 13:03:26
> @@ -464,16 +464,16 @@
>                  for (int i = 0; i < cookies.length; i++) {
>                      if (cookies[i].getName().equals
>                          (Globals.SESSION_COOKIE_NAME)) {
> -
> -                        // Override anything requested in the URL
> -                        
> request.setRequestedSessionId(cookies[i].getValue());
> -                        request.setRequestedSessionCookie(true);
> -                        request.setRequestedSessionURL(false);
> -                        if (debug >= 1)
> -                          log(" Requested cookie session id is " +
> -                              ((HttpServletRequest) 
> request.getRequest()).getRequestedSessionId());
> -                        break;  // Accept only the first session id value
> -
> +                        // If there is more than one session id cookie, 
> only use the first one.
> +                        if (!request.isRequestedSessionIdFromCookie()   
>                     ) {
> +                            // Override anything requested in the URL
> +                            
> request.setRequestedSessionId(cookies[i].getValue());
> +                            request.setRequestedSessionCookie(true);
> +                            request.setRequestedSessionURL(false);
> +                            if (debug >= 1)
> +                            log(" Requested cookie session id is " +
> +                                ((HttpServletRequest) request.getRequest(
> )).getRequestedSessionId());
> +                        }
>                      }
>                      request.addCookie(cookies[i]);
>                  }

Index: catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.java,v
retrieving revision 1.5
diff -u -r1.5 HttpProcessor.java
--- catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.java  
2001/11/09 19:38:44     1.5
+++ catalina/src/share/org/apache/catalina/connector/http10/HttpProcessor.java  
+2001/12/07 13:03:26
@@ -464,16 +464,16 @@
                 for (int i = 0; i < cookies.length; i++) {
                     if (cookies[i].getName().equals
                         (Globals.SESSION_COOKIE_NAME)) {
-
-                        // Override anything requested in the URL
-                        request.setRequestedSessionId(cookies[i].getValue());
-                        request.setRequestedSessionCookie(true);
-                        request.setRequestedSessionURL(false);
-                        if (debug >= 1)
-                          log(" Requested cookie session id is " +
-                              ((HttpServletRequest) 
request.getRequest()).getRequestedSessionId());
-                        break;  // Accept only the first session id value
-
+                        // If there is more than one session id cookie, only use the 
+first one.
+                        if (!request.isRequestedSessionIdFromCookie()                 
+      ) {
+                            // Override anything requested in the URL
+                            request.setRequestedSessionId(cookies[i].getValue());
+                            request.setRequestedSessionCookie(true);
+                            request.setRequestedSessionURL(false);
+                            if (debug >= 1)
+                            log(" Requested cookie session id is " +
+                                ((HttpServletRequest) 
+request.getRequest()).getRequestedSessionId());
+                        }
                     }
                     request.addCookie(cookies[i]);
                 }


Stuart.


            Public Key - 1024D/88DD65AF 2001-11-23 Stuart Roebuck (Adolos)
      Key fingerprint = 89D9 E405 F8B1 9B22 0FA2  F2C1 9E57 5AB1 88DD 65AF
-------------------------------------------------------------------------
Stuart Roebuck                                  [EMAIL PROTECTED]
Lead Developer                               Java, XML, MacOS X, XP, etc.
ADOLOS                                           <http://www.adolos.com/>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to