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