2012-02-02 13 views
13

मैं कुकी के अंदर यूनिकोड मान सेट करने की कोशिश कर रहा हूं लेकिन यह इसे स्वीकार नहीं करता है और अपवाद फेंकता है। मैंने स्ट्रिंग के हेक्साडेसिमल मान की जांच की है और यह सही है लेकिन एक कुकी में जोड़ने के दौरान अपवाद फेंकता है।java.lang.IllegalArgumentException: कुकी मूल्य या विशेषता में नियंत्रण चरित्र

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. 

जब प्रतिक्रिया ऑब्जेक्ट को कुकी जोड़ने। मैं रनटाइम पर्यावरण के रूप में टोमकैट 7 और जावा 7 का उपयोग कर रहा हूं।

उत्तर

22

संस्करण 0 कुकी मान अनुमत वर्णों में प्रतिबंधित हैं। यह केवल यूआरएल-सुरक्षित पात्रों की अनुमति देता है। यह दूसरों के बीच अल्फान्यूमेरिक वर्ण (ए-जेड, ए-जेड और 0-9) और केवल कुछ लेक्सिकल वर्ण शामिल हैं, जिनमें -, _, ., ~ और % शामिल हैं। संस्करण 0 कुकीज़ में अन्य सभी वर्ण अमान्य हैं।

आपकी सर्वश्रेष्ठ शर्त उन वर्णों को यूआरएल-एन्कोड करना है। इस तरह यूआरएल में अनुमति देने वाले प्रत्येक चरित्र को इस फॉर्म %xx में प्रतिशत-एन्कोड किया जाएगा जो कुकी मूल्य के रूप में मान्य है।

तो, जब कुकी बनाने कार्य करें:

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

और जब कुकी पढ़ना, कार्य करें:

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

धन्यवाद यह काम करता है !! –

+0

आपका स्वागत है। – BalusC

संबंधित मुद्दे