2012-02-02 16 views
13

Tanımlama bilgisi, cookie içerisindeki unicode değerini ayarlamaya çalışıyorum ancak bunu kabul etmiyor ve Exception özelliğini atar. Dizenin onaltılık değerini kontrol ettim ve doğru ama bir çerez eklerken Özel Durum atar.java.lang.IllegalArgumentException: Cookie değerinde veya niteliğinde kontrol karakteri

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


      } 
     } 

    } 

alıyorum:

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

yanıt nesnesine çerez ekledi. Tomcat 7 ve Java 7'yi çalışma ortamı olarak kullanıyorum.

cevap

22

Sürüm 0 çerez değerleri izin verilen karakterlerde kısıtlayıcıdır. Sadece URL güvenli karakterlere izin verir. Bu, diğerleri arasında alfanümerik karakterleri (a-z, A-Z ve 0-9) ve -, _, ., ~ ve % dahil olmak üzere yalnızca birkaç sözcük karakterini kapsar. Diğer tüm karakterler sürüm 0 çerezlerinde geçersizdir.

En iyi bahsiniz, bu karakterleri URL kodlamaktır. Bu şekilde, URL'lerde izin verilmeyen her karakter, çerez değeri olarak geçerli olan %xx formunda yüzde olarak kodlanacaktır.

Yani çerez oluştururken, yapın:

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

Ve çerez okurken, yapın: çalıştığını

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

sayesinde !! –

+0

Rica ederim. – BalusC

İlgili konular