2012-02-02 30 views
13

Tôi đang cố gắng đặt giá trị unicode bên trong cookie nhưng nó không chấp nhận điều này và ném Ngoại lệ. Tôi đã kiểm tra giá trị thập lục phân của chuỗi và nó là chính xác nhưng ném ngoại lệ trong khi thêm vào một cookie.java.lang.IllegalArgumentException: Kiểm soát ký tự trong giá trị cookie hoặc thuộc tính

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


      } 
     } 

    } 

tôi nhận được:

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

khi thêm các tập tin cookie để đối tượng phản ứng. Tôi đang sử dụng Tomcat 7 và Java 7 làm môi trường thời gian chạy.

Trả lời

22

Giá trị cookie của phiên bản 0 là hạn chế trong các ký tự được phép. Nó chỉ cho phép các ký tự an toàn cho URL. Điều này bao gồm các ký tự chữ và số khác (a-z, A-Z và 0-9) và chỉ một vài ký tự từ vựng, bao gồm -, _, ., ~%. Tất cả các ký tự khác không hợp lệ trong cookie phiên bản 0.

Đặt cược tốt nhất của bạn là mã hóa URL các ký tự đó. Bằng cách này, mọi ký tự không được phép trong URL sẽ được mã hóa theo phần trăm theo dạng này %xx hợp lệ dưới dạng giá trị cookie.

Vì vậy, khi tạo cookie làm:

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

Và khi đọc các tập tin cookie, làm:

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

nhờ nó hoạt động !! –

+0

Bạn được chào đón. – BalusC

Các vấn đề liên quan