Подтвердить что ты не робот

Java.lang.IllegalArgumentException: управляющий символ в значении или атрибуте cookie

Я пытаюсь установить значение unicode внутри файла cookie, но он не принимает этого и выбрасывает Exception. Я проверил шестнадцатеричное значение строки и правильно, но выбрасывает исключение при добавлении в файл cookie.

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


            }
        }

    }

Я получаю:

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

при добавлении файла cookie в объект ответа. Я использую Tomcat 7 и Java 7 в качестве среды выполнения.

4b9b3361

Ответ 1

Значение cookie версии 0 ограничено допустимыми символами. Это позволяет использовать только URL-безопасные символы. Это охватывает, среди прочего, буквенно-цифровые символы (a-z, A-Z и 0-9) и только несколько лексических символов, включая -, _, ., ~ и %. Все остальные символы недопустимы в файлах cookie версии 0.

Лучше всего использовать URL-кодирование этих символов. Таким образом, каждый символ, который не разрешен в URL-адресах, будет закодирован в процентах в этой форме %xx, которая действительна как значение cookie.

Итак, при создании файла cookie выполните:

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

И при чтении файла cookie выполните:

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