Mark Thomas wrote:
On 14/09/2010 15:16, Christopher Schultz wrote:

I'm in the middle of some major re-factoring so I don;t have time to
actually test this...

0. [Browser has two JSESSIONID cookies: one secure=true and one
secure=false]

This I doubt. When testing load-balancing on a single machine, I have
seen browsers send the same cookie to two Tomcat instances that only
differ by port number. I suspect https and http will be treated the same
way and one cookie will just overwrite the other. You should test that
to be sure though.

1. Browser makes an HTTPS connection to the server and sends both cookies
2. Application code calls request.getSession()

Assuming browsers behave the way I think they will, this should be a
non-issue. If they don't it will get 'interesting'. Either way you'll
need to experiment to be sure.


RFC 2965            HTTP State Management Mechanism         October 2000

...
 Secure
      OPTIONAL.  The Secure attribute (with no value) directs the user
      agent to use only (unspecified) secure means to contact the origin
      server whenever it sends back this cookie, to protect the
      confidentially and authenticity of the information in the cookie.

      The user agent (possibly with user interaction) MAY determine what
      level of security it considers appropriate for "secure" cookies.
      The Secure attribute should be considered security advice from the
      server to the user agent, indicating that it is in the session's
      interest to protect the cookie contents.  When it sends a "secure"
      cookie back to a server, the user agent SHOULD use no less than
      the same level of security as was used when it received the cookie
      from the server.


Personal interpretation : if the browser receives a cookie marked "secure", it should only send it back with requests happening over an HTTPS connection.
(No matter if it was received over HTTP or HTTPS).

Page 8 :
...
Port    The default behavior is that a cookie MAY be returned to any
           request-port.

Personal interpretation : if the "Port" attribute is not specified, the browser may return this cookie on any port; if the port attribute is specified, then it may only return this cookie with requests made over a connection to one of the listed ports.


on page 9 :

 3.3.3  Cookie Management  If a user agent receives a Set-Cookie2
   response header whose NAME is the same as that of a cookie it has
   previously stored, the new cookie supersedes the old when: the old
   and new Domain attribute values compare equal, using a case-
   insensitive string-compare; and, the old and new Path attribute
   values string-compare equal (case-sensitive).

Personal interpretation, inasmuch as necessary :

Neither the "Port" nor the "Secure" attributes are "identifiers" of the cookie; 2 cookies which have the same name and domain and path, but different "Port" and/or "Secure" attributes, are the same cookie, and one overwrites the other.

So a browser should never return 2 cookies with the same name and path, with a request to the same host.

It is even clearer on page 11 :

 The user agent applies the following rules to choose applicable
   cookie-values to send in Cookie request headers from among all the
   cookies it has received.

   Domain Selection
      The origin server's effective host name MUST domain-match the
      Domain attribute of the cookie.

   Port Selection
      There are three possible behaviors, depending on the Port
      attribute in the Set-Cookie2 response header:

      1. By default (no Port attribute), the cookie MAY be sent to any
         port.

      2. If the attribute is present but has no value (e.g., Port), the
         cookie MUST only be sent to the request-port it was received
         from.

      3. If the attribute has a port-list, the cookie MUST only be
         returned if the new request-port is one of those listed in
         port-list.

   Path Selection
      The request-URI MUST path-match the Path attribute of the cookie.


An interesting question is still this :
if a server sends 2 cookies to a browser, with the same name and path, but a diffrent domain : cookie 1 has a domain "myhost.mycompany.com", and cookie 2 a domain of ".company.com". According to what I understand, the browser should cache both cookie separately, as they differ by the domain attribute.
But should the browser return both cookies with the next request to the same 
host ?



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

Reply via email to