Netty -1つのCookieencoderで複数のCookieを設定することはできません

StackOverflow https://stackoverflow.com/questions/8312229

  •  25-10-2019
  •  | 
  •  

質問

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

ご覧のとおり、最初の時間は2つのダミークッキーを設定しようとします。 FFのページ(クッキーがクライアントによって渡される)を更新すると(IEとChromeでも発生します)、リクエストのヘッダーに1つのCookieのみが印刷されます。

ただし、2つのCookieを別のCookieencoderで設定すると(上記のコードスニペットの虚偽節を参照)、すべてが期待どおりに機能します。

これは予想される動作ですか? 1つのCookieencoderで複数のCookieを設定できると思いますか?

役に立ちましたか?

解決 3

問題のように思われるので、私は自分の質問に答えています。見る https://github.com/netty/netty/issues/94.

他のヒント

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

実際には、HTTP Cookie仕様の違反です。 Set-Cookie ヘッダ。 1つのCookieのみをエンコードする必要があります Set-Cookie ヘッダ。

NettyのCookieencoderはそれを許可し、それは非準拠を生成しました Set-Cookie ヘッダー。

この問題を修正するために、Nettyの次のバージョンは IllegalStateException ユーザーがサーバーモードで複数のCookieをエンコードしようとした場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top