Netty - невозможно установить несколько файлов cookie с одним CookieEncoder - PullRequest
2 голосов
/ 29 ноября 2011

У меня есть следующий простой тестовый код в обработчике http моего сервера:

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

Как вы видите, в первый раз я пытаюсь установить два фиктивных куки.Когда я обновляю страницу (таким образом, cookie пропускается клиентом) в FF (также происходит в IE и Chrome), в заголовке запроса и выводится только один cookie.

Однако,если я установлю два файла cookie с помощью отдельного CookieEncoder (см. ложное предложение в фрагменте кода выше), все будет работать так, как ожидается.

Это ожидаемое поведение?Я ожидаю, что вы можете установить несколько файлов cookie с помощью одного CookieEncoder?

Ответы [ 3 ]

1 голос
/ 13 января 2012
// 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);
1 голос
/ 24 июня 2012

На самом деле это нарушение спецификации файлов cookie HTTP для установки нескольких файлов cookie в заголовке Set-Cookie.Вы должны закодировать только один файл cookie для каждого заголовка Set-Cookie.

CookieEncoder от Netty позволил это сделать и сгенерировал несовместимые заголовки Set-Cookie.

Netty выдает IllegalStateException, если пользователь пытается закодировать более одного файла cookie в режиме сервера.

0 голосов
/ 01 декабря 2011

Я отвечаю на свой вопрос, так как это кажется проблемой. Смотри https://github.com/netty/netty/issues/94.

...