6

Servlet 応答で値 unown#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D で Cookie を設定しようとしています。

しかし、ブラウザで Cookie を設定すると、次のように引用符で囲まれて返されます。

"unknown#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D".

なぜこうなった?アプリケーションサーバーとして Jetty を使用しています。

書いたコードを載せます

String cookieValue = "unkown#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D";
Cookie zedoCookie = new Cookie("cookiename", cookieValue);
zedoCookie.setMaxAge(31536000); // this is one year duration.
zedoCookie.setDomain("somedomain.com");
zedoCookie.setPath("/");
response.addCookie(zedoCookie);

誰かがこれに光を当てることができますか?

私はすでにこれを見てきまし。しかし、それは私の問題に対処していないようです。

4

1 に答える 1

9

Jetty 8 (またはそれ以前) は、次の文字を Cookie で許可されていないものとして扱っているようです: "\\n\r\t\f\b%+ ;=( HttpFields -> __COOKIE_DELIM)。これらの文字のいずれかが Cookie の値に含まれている場合、その値は HTTP ヘッダーで二重引用符で囲まれます。URL エンコーディングは問題を解決しません%。文字が内部に残っているためです。私にはバグのように思えます。Jetty メーリング リストに質問を投稿しました。メーリング リストには別の投稿もあり、Jetty バージョン 9 で Cookie バージョンが引き上げられた理由が説明されています。

于 2013-03-05T18:52:51.100 に答える