クッキーには中国語による問題が含まれています

3853 ワード

金曜日にプロジェクトのテストが終わって問題がない後にオンラインになって、オンラインになった後にある口座が登録できないことを発見します
なぜなら、追跡ユーザを記録するためのクッキーにはクッキーが含まれているからである.読み取り、書き込み中に異常が発生しました.
異常はたぶんこうです.
java.lang.IllegalArgumentException: Control character in cookie value or attribute.         at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193)         at org.apache.tomcat.util.http.CookieSupport.isHttpToken(CookieSupport.java:217)         at org.apache.tomcat.util.http.ServerCookie.appendCookieValue(ServerCookie.java:186)         at org.apache.catalina.connector..Response.generateCookieString(Response.java:1032)         at org.apache.catalina.connector..Response.addCookie(Response.java:974)         at org.apache.catalina.connector..ResponseFacade.addCookie(ResponseFacade.java:381)         at com.vcfilm.interceptor.service.AutologonService.setCookie(AutologonService.java:168)         at com.vcfilm.interceptor.service.AutologonService.saveLogonInfo(AutologonService.java:129)         at com.vcfilm.interceptor.service.AutologonService.saveLogonInfo(AutologonService.java:139)         at com.vcfilm.wechat.actioncommon.BaseAction.SaveSession(BaseAction.java:45)         at com.vcfilm.wechat.actioncommon.BaseAction.SetMember(BaseAction.java:191)         at com.vcfilm.wechat.member.MemberAction.logincheck(MemberAction.java:364)         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.lang.reflect.Method.invoke(Method.java:601)
 
中国語にはURLEncoderが必要です.encode.  utf-8 
この文章を参照してください.http://blog.csdn.net/newyear1988/article/details/7817066
 
追加しても問題があり、クッキーを書くときにdesで暗号化して、クッキーを取り、getVal()を取ってから復号するときに異常を発見し、異常コードブロックをキャプチャして直接getVal()で得られた値を返しました.
    /**
     *  cookie 
     * */
    public String getCookieVal(HttpServletRequest request, String key){
        Cookie[] cookies= request.getCookies();
        if(null != cookies && cookies.length > 0){
            for(Cookie c:cookies){
                if(c.getName().equalsIgnoreCase(key)){
                    if(null != c){
                        try{
                            return URLDecoder.decode(c.getValue(), "utf-8");
                        }catch(Exception e){
                            e.printStackTrace();
                            return c.getValue();
                        }
                    }
                }
            }
        }
        return "";
    }
    
    /**
     *  cookie
     * */
    public void setCookie(String key, String val, int maxAge){
        try{
            val = URLEncoder.encode(val, "utf-8");
        }catch(Exception e){
            e.printStackTrace();
        }
        Cookie cookie = new Cookie(key, val);
        if(maxAge > 0){
            cookie.setMaxAge(maxAge);
        }
        cookie.setPath("/");
        ServletActionContext.getResponse().addCookie(cookie);
    }