Valor do Cookie tem espaço, dando cookie.getValue() não vem o cookie completo

Galera,

Por favor me ajude, o valor do cookie gravado tem espaço e mais abri o arquivo onde esta o cookie e está ok, mas na hora de resgatar no java ele traz só até o espaço.

EXEMPLO
cookie = “log”
valor = “teste teste”

Quando rodo o script abaixo ele retorna o valor “teste” sendo que deveria retornar “teste teste”

Cookie[] cookies = request.getCookies();
Cookie cookie;
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Nome: "+cookie.getName() + "
Valor: “+ cookie.getValue()+”
");
}

Por favor me ajude com esse problema.

Experimente utilizar do jeito que está aqui!

Cookie[] cookies = request.getCookies();
int length = cookies.length;
for (int i=0; i<length; i++) {
Cookie cookie = cookies[i];
out.println("Cookie Name: " + cookie.getName() + “
”);
out.println("Cookie Value: " + cookie.getValue() + “
”);
}

Luiz,

Deu o mesmo erro.

O valor do cookie é “teste teste” e ele retorna “teste”.

Putz que problema chato esse caraca, será que é um padrão não arquivar valor de cookie com espaço, mas tem um detalhe em javascript (html) o cookie volta completo “teste teste”.

Por favor quem teve esse problema ou sabe a solução me ajuda, obrigado.

Tive esse problema com o Tomcat (e dava diferença da versão 5.0.20 para a 5.0.24). Como vi que pela definição de cookies (veja o RFC) não é permitido ter espaço, é melhor codificar o seu cookie antes de guardá-lo (experimente visualizar os cookies que estão salvos na sua máquina, para ver que estão todos codificados. ) Eu, por exemplo, fiquei com preguiça e passei tudo para hexadecimal (é que outros caracteres, como vírgulas, também dão problemas); veja o que melhor para você fazer.

Aí esta o programa. Boa sorte!

import javax.servlet.;
import javax.servlet.http.
;
import java.io.;
import java.util.
;

public class CookieServlet extends HttpServlet {

/*Process the HTTP Get request/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

Cookie c1 = new Cookie("userName", "Helen");
Cookie c2 = new Cookie("password", "Keppler Keppler");
response.addCookie(c1);
response.addCookie(c2);

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>Cookie Test</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("Please click the button to see the cookies sent to you.");
out.println("<BR>");
out.println("<FORM METHOD=POST>");
out.println("<INPUT TYPE=SUBMIT VALUE=Submit>");
out.println("</FORM>");
out.println("</BODY>");
out.println("</HTML>");

}
/*Process the HTTP Post request/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(“Cookie Test”);
out.println("");
out.println("");
out.println(“

Here are all the headers.

”);
Enumeration enum = request.getHeaderNames();
while (enum.hasMoreElements()) {
  String header = (String) enum.nextElement();
  out.print("<B>" + header + "</B>: ");
  out.print(request.getHeader(header) + "<BR>");
}

out.println("<BR><BR><H2>And, here are all the cookies.</H2>");
Cookie[] cookies = request.getCookies();
int length = cookies.length;
for (int i=0; i<length; i++) {
  Cookie cookie = cookies[i];
  out.println("<B>Cookie Name:</B> " + cookie.getName() + "<BR>");
  out.println("<B>Cookie Value:</B> " + cookie.getValue() + "<BR>");
}

out.println("</BODY>");
out.println("</HTML>");

}
}

Luiz Barbosa,

Não uso servlet, mas fiz em jsp conforme código abaixo, mas deu o mesmo erro o retorno foi
Cookie Value: Keppler
Cookie Name: Keppler

<%
Cookie c1 = new Cookie(“userName”, “Helen”);
Cookie c2 = new Cookie(“password”, “Keppler Keppler”);
response.addCookie(c1);
response.addCookie(c2);

out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>Cookie Test</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<H2>Here are all the headers.</H2>");

out.println("<BR><BR><H2>And, here are all the cookies.</H2>");
Cookie[] cookies = request.getCookies();
int length = cookies.length;
for (int i=0; i<length; i++) {
Cookie cookie = cookies[i];
out.println("<B>Cookie Name:</B> " + cookie.getName() + “<BR>”);
out.println("<B>Cookie Value:</B> " + cookie.getValue() + “<BR>”);
}

out.println("</BODY>");
out.println("</HTML>");
%>

Esta funcionando perfeitamente em JSP.

Aí esta a resposta do seu programa.

Here are all the headers.

And, here are all the cookies.
Cookie Name: userName
Cookie Value: Helen
Cookie Name: password
Cookie Value: Keppler Keppler
Cookie Name: JSESSIONID
Cookie Value: 6D6840094F0D546FFCAD65927E62E1D2

Caraca só se for alguma configuração em meu servidor porque na máquina que executa não pode ser, pq ele está armazenado completo só o java que não encontra ele completo.

Obrigado pela ajuda, vou pesquisar o motivo.

Como eu falei antes - realmente, cada servidor tem um tratamento diferente para cookies, e versões diferentes do mesmo servidor têm comportamentos diferentes. No meu caso eu tive problemas de cookies com o Tomcat 5.0.20 que foram magicamente resolvidos no 5.0.28; por isso é que falo que é melhor codificar o cookie (troque " " por %20, por exemplo) para não fazer programas que “bombam” se o server não estiver com a versão correta.

É vai ser a solução mesmo Valeu obrigado.

Olá, me deculpe pela pergunta simples mas tem algum jeito de configurar mais de valor para um único cookie e depois resgatar esses valores um a um? exemplo:

Gravar:

Cookie cookie = new Cookie ("NomeCookie", QualquerCoisa);
nomeCok.setValue("a");
nomeCok.setValue("b");
response.addCookie(NomeCookie);

Ler:

Cookie[] listaCookies= request.getCookies(); Cookie Cookie_Recuperado=null; for(int i=0;i<listaCookies.length;i++){ if(listaCookies[i].getName().equals("NomeCookie")){ Cookie_Recuperado=listaCookies[i]; out.println(Cookie_Recuperado.getValue()); } }