Tomcat報錯Control character in cookie value or attribute.


Tomcat若出現如下錯誤:java.lang.IllegalArgumentException: Control character in cookie value or attribute.如下圖所示:

 

產生該問題原因:Cookie處理中文時編碼問題,中文采用的是Unicode編碼,而英文采用的是ASCII編碼,當Cookie保存中文的時候需要對中文進行編碼,而且從Cookie中取出內容的時候也要進行解碼。下面舉一個例子來解決該問題:

 <script type="text/javascript">
    
    /*添加cookie*/
    function setCookie(name,value,outTime){
        var expdate=new Date();
        var outms=outTime*24*60*60*1000;//過期時間,以天為單位‘1’表示一天
        expdate.setTime(expdate.getTime()+outms);
        var cookieStr=name+"="+escape(value)+";expires="+expdate.toGMTString();
        //escape方法的作用是進行編碼,主要防止value中有特殊字符
        document.cookie=cookieStr;
    }
    /*刪除cookie
        cookie的刪除並不是物理意義上的直接刪除,
        而是將cookie的有效期設置為失效,然后由瀏覽器刪除失效的cookie刪除
    */
    function deleteCookie(cookiename){
        var date = new Date();
        var outTime=date.getTime()-1000;//將cookie的有效期設置為失效
        date.setTime(outTime);
        document.cookie=cookiename+"='';expires="+date.toGMTString();
    }
    /*讀取cookie*/
    function getCookie(cookieName){
        var cookieStr=document.cookie;
        var cookievalue="";
        if(cookieStr!=null &&cookieStr!=undefined){
            var arrayCookie=cookieStr.split(';');
            for(var i=0;i<arrayCookie.length;i++){
                    var arrayDetail=arrayCookie[i].split('=');
                    if(i==0){
                        cookiMap='{"'+arrayDetail[0]+'":"'+arrayDetail[1]+'",';
                    }else if(i==arrayCookie.length-1){
                        cookiMap+='"'+arrayDetail[0]+'":"'+arrayDetail[1]+'"}';
                    }else{
                        cookiMap+='"'+arrayDetail[0]+'":"'+arrayDetail[1]+'",';
                    }
                }
            }
            var s=cookiMap.replace(/\s/g,"");//去掉字符串中空格
            var cookieObj=JSON.parse(s);
        for(var item in cookieObj){
            if(item==cookieName){
                cookievalue=unescape(cookieObj[item]);
            }
        }
        return cookievalue;
    }

    window.onload=function(){
        var jsonObj={"姓名":"ycyzharry","年齡":"28","職業":"程序員"}
        setCookie("abc",JSON.stringify(jsonObj),2);//在cookie中寫入json串
        setCookie("abd","hello word",2);// 寫入cookie
        setCookie("abe","編程",2);
        var s={'abc':'{"姓名":"ycyzharry","年齡":"28","職業":"程序員"}','abd':'hello word','abe':'編程'};
        deleteCookie('abe'); //刪除cookie
        alert(getCookie('abe'));//根據key值獲取cookie
    }
 </script>

總結:使用escape對字符串進行編碼,編碼的目的是防止在cookie中出現特殊字符,用unescape轉換編碼后的字符串。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM