0
在春天,我設置了一些餅乾我需要爲我的WebSocket:Websocket握手 - cookie不能被解析?
Cookie ck = new Cookie("session", request.getSession().getId());
ck.setDomain(".mydomain.com");
ck.setPath("/");
ck.setVersion(1);
Cookie secretCookie = new Cookie("scrt", secret);
secretCookie.setDomain(".mydomain.com");
secretCookie.setPath("/");
secretCookie.setVersion(1);
response.addCookie(secretCookie);
response.addCookie(ck);
但是,當我讀的WebSocket握手的頭,cookie字段的值僅由它看起來像這樣的字符串:
session=foobar; scrt=foomart
當您試圖通過HttpCookie.parse();
解析此值時,HTTPCookie將嘗試識別cookie的版本。
private static int guessCookieVersion(String header) {
int version = 0;
header = header.toLowerCase();
if (header.indexOf("expires=") != -1) {
// only netscape cookie using 'expires'
version = 0;
} else if (header.indexOf("version=") != -1) {
// version is mandatory for rfc 2965/2109 cookie
version = 1;
} else if (header.indexOf("max-age") != -1) {
// rfc 2965/2109 use 'max-age'
version = 1;
} else if (startsWithIgnoreCase(header, SET_COOKIE2)) {
// only rfc 2965 cookie starts with 'set-cookie2'
version = 1;
}
return version;
}
如果值爲0,這是錯誤的,但在這裏的情況下,HttpCookie將只解析第一個條目。 如果你強制版本爲1,這也不起作用,因爲HttpCookie期待逗號分隔值。 splitMultiCookies(String header)
有沒有辦法解決這個問題,但寫我自己的解析器?
是的,cookie標頭只包含'session = foobar; SCRT = foomart'。但是,然後HttpCookie.parse()不正確,是嗎? – Goot
我不知道java如何處理它,情況是「版本」不再是規範的一部分。你確定你正在使用正確的Java版本嗎? – vtortola
你是什麼意思「正確的java版本」?我正在運行1.7.0_17。 – Goot