Dúvida sobre cookies

1 resposta
lsavenhago

Boa noite a todos

Estou com uma dúvida sobre a utilização de cookies.
Tenho meu servlet com o ContentType como “text/html;charset=UTF-8” e estou utilizando cookies na aplicação.
Mas quando adiciono um cookie que tem acento em alguma das letras ocorre o seguinte erro na aplicação:

15/03/2010 23:44:44 org.apache.catalina.core.StandardWrapperValve invoke

SEVERE: Servlet.service() for servlet ServletLogin threw exception

java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value

at org.apache.tomcat.util.http.ServerCookie.maybeQuote2(ServerCookie.java:396)

at org.apache.tomcat.util.http.ServerCookie.maybeQuote2(ServerCookie.java:389)

at org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCookie.java:293)

at org.apache.catalina.connector.Response.addCookieInternal(Response.java:1010)

at org.apache.catalina.connector.Response.addCookieInternal(Response.java:979)

at org.apache.catalina.connector.Response.addCookie(Response.java:967)

at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:343)

at org.netbeans.modules.web.monitor.server.MonitorResponseWrapper.addCookie(MonitorResponseWrapper.java:127)

at br.com.webCurric.servlets.ServletLogin.geraCookieLogin(ServletLogin.java:158)

at br.com.webCurric.servlets.ServletLogin.processRequest(ServletLogin.java:63)

at br.com.webCurric.servlets.ServletLogin.doPost(ServletLogin.java:121)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)

at java.lang.Thread.run(Thread.java:619)

Pelo que pesquisei na internet, o cookie não aceita acento. Isso é correto? Ou posso usar a codificação “ISO” padrão Brasil?

Bom, aqui vai o método que utilizei para adcionar o cookie

public boolean geraCookieLogin(String[] cookieName, String[] cookieValue, int cookieAge, HttpServletResponse response) {

int countCookies = 0;
    for (String name: cookieName) {
        Cookie cookie = new Cookie(name, cookieValue[countCookies]);
        System.out.println("name: " + name + " cookieValue: " + cookieValue[countCookies]);
        cookie.setMaxAge(cookieAge);
        response.addCookie(cookie);            
        countCookies++;
    }

    return true;

}

1 Resposta

sergiotaborda

lsavenhago:
Boa noite a todos

Estou com uma dúvida sobre a utilização de cookies.
Tenho meu servlet com o ContentType como “text/html;charset=UTF-8” e estou utilizando cookies na aplicação.
Mas quando adiciono um cookie que tem acento em alguma das letras ocorre o seguinte erro na aplicação:

As cookies não suportam UTF-8 apenas ASCII (que é menor)

É boa prática codificar as cookies em Base64 ( que garante que apenas caracteres compativeis com ASCII são usados)
Que é exactamente o que lhe é sugerido na mensagem:

15/03/2010 23:44:44 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet ServletLogin threw exception
java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value
at org.apache.tomcat.util.http.ServerCookie.maybeQuote2(ServerCookie.java:396)

Criado 15 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 1
Participantes 2