2013-01-31 23 views
6

Tôi đang cố gắng đặt cookie có giá trị không rõ # 4? Wn5pZ1JwQnlLEGRJAgB4WQU% 3D trong phản hồi Servlet.Cookie được đặt bởi Máy chủ ứng dụng có dấu ngoặc kép

Nhưng khi tôi thiết lập các cookie trong trình duyệt nó sẽ được trả về với dấu ngoặc kép xung quanh nó như thế này:

"? Unkown # 4 Wn5pZ1JwQnlLEGRJAgB4WQU% 3D".

Tại sao điều này lại xảy ra? Chúng tôi đang sử dụng Jetty làm máy chủ ứng dụng.

tôi sẽ đặt mã mà tôi đã viết

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

Ai đó có thể đặt một số ánh sáng về vấn đề này?

Tôi đã xem this. Nhưng nó dường như không giải quyết được vấn đề của tôi.

Trả lời

8

Dường như Jetty 8 (hoặc cũ hơn) xử lý các ký tự sau không được phép trong Cookie: "\\n\r\t\f\b%+ ;= (HttpFields ->__COOKIE_DELIM). Nếu một trong các ký tự này được chứa trong giá trị của cookie, thì giá trị sẽ được đặt trong dấu ngoặc kép trong tiêu đề HTTP. Mã hóa URL không giải quyết được sự cố, kể từ đó bạn sẽ vẫn có ký tự % bên trong. Đối với tôi, nó có vẻ giống như một con bọ. Tôi đã đăng câu hỏi lên số Jetty mailing list. Ngoài ra còn có một bài đăng khác trong danh sách gửi thư, giải thích lý do tại sao phiên bản cookie được nâng lên trong phiên bản Jetty 9.

+0

+1 Cảm ơn vì điều này. Tôi đã chuyển đổi '+' -> '-', '/' -> '.', Và '=' -> '_' để lấy cookie base64 của tôi để được lưu trữ không có dấu cách. – Gray

Các vấn đề liên quan