2012-02-02 13 views
13

Sto provando ad impostare il valore unicode all'interno del cookie ma non lo accetta e lancia Eccezione. Ho controllato il valore esadecimale della stringa ed è corretto ma getta Exception mentre aggiungo ad un cookie.java.lang.IllegalArgumentException: Controllo carattere nel valore del cookie o attributo

private void fnSetCookieValues(HttpServletRequest request,HttpServletResponse response) 
    { 

     Cookie[] cookies=request.getCookies(); 
     for (int i = 0; i < cookies.length; i++) { 

      System.out.println(""+cookies.length+"Name"+cookies[i].getName()); 

      if(cookies[i].getName().equals("DNString")) 
      { 
       System.out.println("Inside if:: "+cookies[i].getValue()+""+cookies.length); 
       try { 

        String strValue; 
        strValue = new String(request.getParameter("txtIIDN").getBytes("8859_1"),"UTF8"); 
        System.out.println("Cookie Value To be stored"+strValue); 
        for (int j = 0; j < strValue.length(); j++) { 

         System.out.println("Code Point"+Integer.toHexString(strValue.codePointAt(j))); 

        } 


        Cookie ck = new Cookie("DNString",strValue); 
        response.addCookie(ck); 

       } catch (UnsupportedEncodingException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


      } 
     } 

    } 

ottengo:

java.lang.IllegalArgumentException: Control character in cookie value or attribute. 

quando si aggiunge il cookie per oggetto risposta. Sto usando Tomcat 7 e Java 7 come ambiente di runtime.

risposta

22

I valori dei cookie della versione 0 sono limitati nei caratteri consentiti. Permette solo caratteri sicuri per URL. Ciò comprende tra l'altro i caratteri alfanumerici (a-z, A-Z e 0-9) e solo alcuni caratteri lessicali, tra cui -, _, ., ~ e %. Tutti gli altri caratteri non sono validi nei cookie versione 0.

La soluzione migliore è codificare in URL quei caratteri. In questo modo ogni carattere che non è consentito negli URL sarà codificato in percentuale in questo modulo %xx che è valido come valore del cookie.

Così, quando si crea il cookie fare:

Cookie cookie = new Cookie(name, URLEncoder.encode(value, "UTF-8")); 
// ... 

E quando si legge il cookie, eseguire:

String value = URLDecoder.decode(cookie.getValue(), "UTF-8"); 
// ... 
+0

grazie funziona !! –

+0

Prego. – BalusC

Problemi correlati