pagina and all aboutcookies about cookies persistent

and - Establecer cookies persistentes desde Java no funciona en IE



session and cookies (3)

Todas,

Aunque veo temas relacionados en el foro, pero no veo una solución clara sobre este tema. Estoy intentando establecer javax.servlet.http.Cookie con un tiempo de caducidad (para que persista en todas las sesiones del navegador). Código:

public void respond(HttpServletRequest req, HttpServletResponse resp) { int expiration = 3600; Cookie cookie = new Cookie("TestCookie", "xyz"); cookie.setDomain(""); cookie.setVersion(0); cookie.setPath("/"); cookie.setMaxAge(expiration); cookie.setSecure(false); resp.addCookie(cookie); }

No veo esta cookie configurada cuando reviso las herramientas de desarrollo de IE. La búsqueda en Internet me dio pistas de que IE no considera Max-Age, pero solo funciona con Expires. Si esto no funciona para IE, ¿existe una manera comprobada de configurar los encabezados de respuesta HTTP para una cookie persistente para que funcione para IE?

PD: Esto funciona bien en todos los otros navegadores.

Traté de crear una cadena para el atributo cookie expira. IE logró crearlo, pero perdió el dominio (predeterminado - "") y mostró ".com" y lo convirtió en una cookie de sesión en lugar de una cookie persistente. Esto funciona bien en todos los demás navegadores.

Por favor ayuda. Gracias.


Como javax.servlet.http.Cookie no le permite establecer el atributo Expires en la cookie, debe configurarlo manualmente.

También necesita saber que Expires debe especificarse en forma de Wdy, DD Mon YYYY HH:MM:SS GMT después de la sección RFC-2616 Fecha completa ( más información ).

En Java puedes hacerlo de esta manera:

public void respond(HttpServletRequest req, HttpServletResponse resp) { int expiration = 3600; StringBuilder cookie = new StringBuilder("TestCookie=xyz; "); DateFormat df = new SimpleDateFormat("EEE, dd-MMM-yyyy HH:mm:ss ''GMT''", Locale.US); Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 3600); cookie.append("Expires=" + df.format(cal.getTime()) + "; "); cookie.append("Domain=; "); cookie.append("Version=0; "); cookie.append("Path=/; "); cookie.append("Max-Age=" + expiration + "; "); cookie.append("Secure; "); resp.setHeader("Set-Cookie", cookie.toString()); }


Al trabajar con IE9, descubrí que era el atributo HttpOnly que se requería para hacer que reflejara el valor de la cookie en publicaciones posteriores, por ejemplo:

Set-Cookie: autologCk1=ABCD; Path=/autolog/; HttpOnly


La respuesta está en las cookies persistentes de un servlet en IE .

Su caso puede tener un sabor diferente del mismo problema: es decir, prefijando el dominio con un "." (que estoy bastante seguro es una característica de cookie de la versión 1), algo en la pila de Java decide que es una cookie de versión 1 (no reconocida y no persistente por IE, incluso IE8) y envía ese formato de cookie.

O, como sugiere esa respuesta, ¿hay algo en el valor de tu cookie que contenga un personaje no reconocido?