Pregunta

Tengo el siguiente código de prueba simple en el controlador HTTP de mi servidor:

String cookieString = request.getHeader(COOKIE);

if (cookieString != null) {
    CookieDecoder cookieDecoder = new CookieDecoder();
    Set<Cookie> cookies = cookieDecoder.decode(cookieString);

    if (!cookies.isEmpty()) {
        CookieEncoder cookieEncoder = new CookieEncoder(true);

        for (Cookie cookie : cookies) {
            System.out.println("---> " + cookie);
            cookieEncoder.addCookie(cookie);
        }
        response.addHeader(SET_COOKIE, cookieEncoder.encode());
    }
} else {
    // set cookie for initial time (just testing)
    if (true) {
        CookieEncoder cookieEncoder = new CookieEncoder(true);

        cookieEncoder.addCookie("key", "value");
        cookieEncoder.addCookie("key2", "value2");

        response.addHeader(SET_COOKIE, cookieEncoder.encode());
    } else {
        CookieEncoder cookieEncoder1 = new CookieEncoder(true);
        CookieEncoder cookieEncoder2 = new CookieEncoder(true);

        cookieEncoder1.addCookie("key", "value");
        cookieEncoder2.addCookie("key2", "value2");

        response.addHeader(SET_COOKIE, cookieEncoder1.encode());
        response.addHeader(SET_COOKIE, cookieEncoder2.encode());
    }
}

Como puede ver, la hora inicial que intento configurar dos galletas ficticias. Cuando actualizo la página (por lo que el cliente pasa la cookie) en FF (también sucede en IE y Chrome), solo una cookie está en el encabezado de la solicitud e imprimida.

Sin embargo, si configuro las dos cookies con un cookiecoder separado (vea la cláusula falsa en el fragmento de código arriba), todo funciona como se esperaba.

¿Es este comportamiento esperado? ¿Esperaría que puedas configurar múltiples cookies con un cookiecoder?

¿Fue útil?

Solución 3

Estoy respondiendo a mi propia pregunta, ya que parece ser un problema. Ver https://github.com/netty/netty/issues/94.

Otros consejos

// Initialize Variables
ArrayList<String> cookieArray = new ArrayList<String>();

// Encode 'cooke1' to 'response' Header
encoder.addCookie(cookie1);

// Append 'cookie1' to 'cookieArray'
cookieArray.add(encoder.encode());

// Encode 'cooke2' to 'response' Header
encoder.addCookie(cookie2);

// Append 'cookie2' to 'cookieArray'
cookieArray.add(encoder.encode());

// Create Cookies using 'cookieArray'
response.setHeader("Set-Cookie", cookieArray);

En realidad, es una violación de la especificación de cookies HTTP para establecer múltiples cookies en un Set-Cookie encabezamiento. Tienes que codificar solo una cookie por Set-Cookie encabezamiento.

CookieCoder de Netty permitió hacer eso y generó incumplimiento Set-Cookie encabezados.

Para solucionar este problema, la próxima versión de Netty lanzará un IllegalStateException Si un usuario intenta codificar más de una cookie en el modo de servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top