2013-01-31 3 views
6

Ich versuche, ein Cookie mit Wert unkown # 4? Wn5pZ1JwQnlLEGRJAgB4WQU% 3D in Servlet-Antwort.Cookie von Application-Server mit doppelten Anführungszeichen gesetzt

Aber wenn ich das Cookie in Browser so einstellen, ist es mit Anführungszeichen umgeben es wie folgt zurückgegeben:

"? Unkown 4 # Wn5pZ1JwQnlLEGRJAgB4WQU% 3D".

Warum passiert das? Wir verwenden Jetty als Anwendungsserver.

werde ich Code setzen, die ich geschrieben habe

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

Kann jemand etwas Licht in diese setzen?

Ich habe mir schon this angesehen. Aber es scheint mein Problem nicht zu lösen.

Antwort

8

Anscheinend behandelt Jetty 8 (oder früher) die folgenden Zeichen als in Cookies nicht zulässig: "\\n\r\t\f\b%+ ;= (HttpFields ->__COOKIE_DELIM). Wenn eines dieser Zeichen im Wert des Cookies enthalten ist, wird der Wert im HTTP-Header in doppelte Anführungszeichen gesetzt. URL-Encoding löst das Problem nicht, da dann immer noch das % Zeichen drin ist. Für mich scheint es wie ein Käfer. Ich habe eine Frage an die Jetty mailing list gestellt. Es gibt auch einen anderen Beitrag in der Mailing-Liste, der erklärt, warum die Cookie-Version in Jetty Version 9 ausgelöst wird.

+0

+1 Danke dafür. Ich habe '+' -> '-', '/' -> '.' Und '=' -> '_' konvertiert, damit mein base64-Cookie ohne Leerzeichen gespeichert wird. – Gray

Verwandte Themen