Domanda

Ho il seguente codice di prova semplice al mio server http gestore:

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());
    }
}

Come si può vedere, il tempo iniziale cerco di impostare due biscotti fittizi. Quando mi aggiorna la pagina (in modo che il cookie viene passato attraverso dal cliente) in FF (accade anche in IE e Chrome), solo un cookie è nell'intestazione della richiesta e stampato.

Tuttavia, se ho impostato le due biscotti con un CookieEncoder separato (vedi falso-clausola nel frammento di codice di cui sopra), tutto funziona come previsto.

E 'questo comportamento previsto? Mi aspetterei che è possibile impostare più cookie con un CookieEncoder?

È stato utile?

Soluzione 3

sto rispondendo alla mia domanda, dal momento che sembra essere un problema. Vedere https://github.com/netty/netty/issues/94 .

Altri suggerimenti

// 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);

In realtà è una violazione di HTTP biscotto specifica per impostare più cookie in un'intestazione Set-Cookie. È necessario codificare un solo biscotto per ogni intestazione Set-Cookie.

CookieEncoder di Netty permesso di farlo e ha generato le intestazioni Set-Cookie non conformi.

Per risolvere questo problema, la prossima versione di Netty getterà un IllegalStateException se un utente tenta di codificare più di un biscotto in modalità server.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top