2013-01-31 13 views
6

Próbuję ustawić plik cookie o wartości unkown # 4? Wn5pZ1JwQnlLEGRJAgB4WQU% 3D w odpowiedzi serwletu.Zestaw plików cookie utworzony przez serwer aplikacji o podwójnych ofertach

Ale kiedy ustawić cookie w przeglądarce jest ona zwracana z cytatami otaczających go tak:

"? Unkown # 4 Wn5pZ1JwQnlLEGRJAgB4WQU% 3D".

Dlaczego tak się dzieje? Używamy Jetty jako serwera aplikacji.

położę kod, który napisałem

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

ktoś może umieścić trochę światła na ten temat?

Już raz obejrzałem this. Ale to nie rozwiązuje mojego problemu.

Odpowiedz

8

Wygląda na to, że Jetty 8 (lub wcześniejszy) traktuje następujące znaki jako niedozwolone w plikach cookie: "\\n\r\t\f\b%+ ;= (HttpFields ->__COOKIE_DELIM). Jeśli jeden z tych znaków jest zawarty w wartości pliku cookie, wówczas wartość zostanie ujęta w podwójne cudzysłowy w nagłówku HTTP. Kodowanie adresu URL nie rozwiązuje problemu, ponieważ w takim przypadku nadal będzie występował znak %. Dla mnie wygląda jak błąd. Wysłałem pytanie do Jetty mailing list. Istnieje również inny wpis na liście mailingowej, który wyjaśnia, dlaczego wersja pliku cookie została podniesiona na Jetty w wersji 9.

+0

+1 Dzięki za to. Przekonwertowałem "+" -> "-", "/" -> "." I "=" -> "_", aby mój plik base64 był przechowywany bez spacji. – Gray

Powiązane problemy