Au printemps, je mis quelques biscuits j'ai besoin pour mon websocket:Websocket Handshake - le cookie ne peut pas être analysé?
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);
Mais quand je lis l'en-tête de la poignée de main WebSocket, la valeur du champ cookie ne se compose que d'une chaîne qui ressemble à ceci:
Lorsque vous essayez d'analyser cette valeur parHttpCookie.parse();
, le HTTPCookie essaie d'identifier la version du cookie.
session=foobar; scrt=foomart
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;
}
Si la valeur est 0, ce qui est faux, mais le cas ici, le HttpCookie n'analysera la première entrée. Si vous forcez la version à 1, cela ne fonctionnera pas non plus, puisque HttpCookie attend des valeurs séparées par des virgules.
Est-il possible de résoudre ce problème en écrivant mon propre analyseur?
Oui, l'en-tête de cookie contient uniquement 'session = foobar; scrt = foomart'. Mais alors HttpCookie.parse() ne fonctionne pas correctement, n'est-ce pas? – Goot
Je ne sais pas comment java le gère, le cas est que "version" ne fait plus partie de la spécification. Êtes-vous sûr d'utiliser la bonne version de Java? – vtortola
Que voulez-vous dire par "version java droite"? Je cours 1.7.0_17. – Goot