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

10 respostas
D

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.

10 Respostas

L

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("<b>Cookie Name:</b> " + cookie.getName() + 
);

out.println("<b>Cookie Value:</b> " + cookie.getValue() + 
);

}
D

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.

T

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.

L

Aí esta o programa. Boa sorte!

import javax.servlet.<em>;

import javax.servlet.http.</em>;

import <a href="http://java.io">java.io</a>.<em>;

import java.util.</em>;

public class CookieServlet extends HttpServlet {

/*<em>Process the HTTP Get request</em>/

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

/*<em>Process the HTTP Post request</em>/

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

}
}

D

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

%>
L

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

D

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.

T

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.

D

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

welingtondias

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

Criado 17 de agosto de 2005
Ultima resposta 1 de jul. de 2011
Respostas 10
Participantes 4