Hello Oleg, Thanks, after some tests this is exactly what it happens.
When I send this cookie to my servlet, I receive all its data correctly except the "max-age" attribute, which is always -1. I'm trying to set MAX_AGE with your API, and I'm getting crazy... I've tried "stdCookie.setExpiryDate(new java.util.Date(System.currentTimeMillis() + 60000)); // Expires after 60 seconds But my servlet gets -1 (when I get cookies from HttpServletRequest with request.getCookies()). I supposed that I had to set the same value for MAX_AGE attribute. Then I tried: stdCookie.setExpiryDate(new java.util.Date(System.currentTimeMillis() + 60000)); stdCookie.setAttribute(ClientCookie.MAX_AGE_ATTR, "60"); // 60 seconds But my servlet still receives -1 in MAX_AGE. Finally, I'm trying to set the "ClientCookie.EXPIRES_ATTR" with the value of java.util.Date(System.currentTimeMillis() + 60000)), but the value passed to setAttribute is expected to be a String, and I have a java.util.Date. How can I make this conversion? Thanks in advance, Joan. -----Mensaje original----- De: Oleg Kalnichevski [mailto:ol...@apache.org] Enviado el: martes, 07 de julio de 2009 16:18 Para: HttpClient User Discussion Asunto: Re: QUESTION ABOUT COOKIES On Mon, Jul 06, 2009 at 08:14:48PM +0200, Joan Balaguer? Valls wrote: > Hello Oleg, > > > > I?m trying to send cookies to a servlet with a simple app. Following the > tutorial: > > > > HttpContext localContext = new BasicHttpContext(); > > CookieStore cookieStore = new BasicCookieStore(); > > > BasicClientCookie stdCookie = new BasicClientCookie("name", "value"); > stdCookie.setVersion(1); > stdCookie.setDomain(".mycompany.com"); > stdCookie.setPath("/"); > stdCookie.setSecure(true); > > // Set attributes EXACTLY as sent by the server > stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1"); > stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com"); > > > > cookieStore.addCookie(stdCookie); > > localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); > > > > HttpEntity entity = objHttp.execute(objPost, localContext).getEntity(); > > > > > > This does not work (at least for me). To work, you need to add: > > > > stdCookie.setAttribute(ClientCookie.PATH, "/"); > > If I forget any of the ?set? statement, or any of the ?setAttribute? > statement, it does not work. > > > The question is: Why have we to set twice the components of the > ?BasicClientCookie?, the first using ?stdCookie.set? and the second using > ?stdCookie.setAttribute?? > > And should I set ?ClientCookie.SECURE_ATTR? and ?ClientCookie.MAX_AGE_ATTR? > ? > Joan This is because some cookies set domain / path / port attributes explicitly, while some do not, in which case values of those attributes are derived from the properties of the origin server. Consider the following example: Set-Cookie: stuff="very important"; path="/"; domain="myhost.mydomain.com"; version=1 Set-Cookie: stuff="very important"; version=1 These two cookies are obviously different but they essentially represent the same piece of state information if sent in response to a request for "http://myhost.mydomain.com/index.html" > > And the second part: when the servlet receives this cookie, it is resent to > another servlet using the same sequence of operations. But debugging, one > can see that the cookie is not added to the cookieStore (the sentence > ?cookieStore.addCookie(stdCookie);? does not add anything to ?cookieStore?). > A cookie does not get added to the cookie store only if it has expired. Hope this helps Oleg > Can you help me? > > > Thanks in advance, > > Joan. > > > --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org