2013-01-31 9 views
6

サーブレットレスポンスで値#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3Dのクッキーを設定しようとしています。クッキーが二重引用符で囲まれたアプリケーションサーバーで設定されています

しかし、私は、ブラウザでクッキーを設定すると、それはこのようにそれを囲む引用符で返されます。

「?不明な#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); 

誰かがこの上でいくつかの光を入れることはできますか?

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

答えて

8

Jetty 8(またはそれ以前のバージョン)では、次の文字をCookieで許可されていないとみなしているようです:"\\n\r\t\f\b%+ ;=HttpFields - >__COOKIE_DELIM)これらの文字の1つがCookieの値に含まれる場合、その値はHTTPヘッダーに二重引用符で囲まれます。 URLエンコーディングで問題が解決されないため、内部には%という文字が残ります。私にはバグのようだ。私はJetty mailing listに質問を掲示しました。メーリングリストには、Jettyバージョン9でクッキーのバージョンがなぜ上がったのかを説明する記事もあります。

+0

+1ありがとうございます。私はbase64のクッキーをスペースなしで保存するために '+' - > ' - '、 '/' - > '、' = ' - >' _ 'を変換しました。 – Gray