Frage

Ich habe den folgenden einfachen Testcode auf meinem Server HTTP -Handler:

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

Wie Sie sehen können, versuche ich, zwei Dummy -Cookies zu setzen. Wenn ich die Seite (das Cookie vom Client durchlaufen wird) in FF (auch in IE und Chrome) aktualisiere, befindet sich nur ein Cookie im Kopfzeiler der Anfrage und wird ausgedruckt.

Wenn ich jedoch die beiden Cookies mit einem separaten CookieSencoder (siehe falsche Klausel in Code-Snippet oben) einstellte, funktioniert alles wie erwartet.

Ist das erwartete Verhalten? Ich würde erwarten, dass Sie mehrere Cookies mit einem CookieCoder einstellen können?

War es hilfreich?

Lösung 3

Ich beantworte meine eigene Frage, da dies ein Problem zu sein scheint. Sehen https://github.com/nety/nety/issues/94.

Andere Tipps

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

Es ist tatsächlich ein Verstoß gegen die HTTP -Cookie -Spezifikation, um mehrere Cookies in a zu setzen Set-Cookie Header. Sie müssen nur einen Cookie pro codieren Set-Cookie Header.

Netty's CookieEncoder erlaubte dies und erzeugte nicht konforme Set-Cookie Header.

Um dieses Problem zu beheben, wird die nächste Version von Netty eine werfen IllegalStateException Wenn ein Benutzer versucht, mehr als einen Cookie im Servermodus zu codieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top