2013-01-31 49 views
6

我試圖在Servlet響應中設置一個值爲未知#4?Wn5pZ1JwQnlLEGRJAgB4WQU%3D的cookie。由具有雙引號的應用程序服務器設置的Cookie

但是,當我在瀏覽器中設置cookie它與周圍像這樣的報價返回:

「?未知#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)。如果其中一個字符包含在cookie的值中,則該值將用雙引號括在HTTP-Header中。 網址編碼不能解決問題,因爲那時你仍然會有%的字符。對我來說,這似乎是一個錯誤。我向Jetty mailing list發佈了一個問題。郵件列表中還有另一篇文章,它解釋了爲什麼cookie版本在Jetty版本9中提出。

+0

+1感謝您的支持。我已經轉換'+' - >' - ','/' - >'。'和'=' - >'_'來讓我的base64 cookie不用空格。 – Gray

相關問題