Control character in cookie value or attribute

先说一下环境 tomcat7,jdk7
在这里插入图片描述
在做一个cookie保存账号的时候报这个错,各种google,baidu后,大家基本都归结于转码的问题,然后我在我代码中,添加了存储cookie时,转码username=URLEncoder.encode(username,“UTF-8”); 在取出cookie时候,解码username = URLDecoder.decode(username,“UTF-8”),并且设置tomcat的编码为utf-8,可惜问题依旧;
后来看到网友说,tomcat7对中文支持不好,然后我下载了一个tomcat6,吧程序跑了起来,发现报错换了!!!就是这个报错,让我解决了问题…
现在的运行环境是:tomcat6 jdk7
我吧程序跑了起来,发现tomcat6也是无法运行,可以报的错是:Control character in cookie value, consider BASE64 encoding your value ,看到base64后,我产生了疑问,base64是我加密的算法,用于给用户名加密,难道是我加密后的字符串再转码出问题?然后我把我代码修改成,先加密,后转码

username = username.trim();
username = EncryptionCoder.EncryptedCookie(username);	//加密
username=URLEncoder.encode(username,"UTF-8");	//转码

在页面取出时,就先解码,后解密

Cookie[] cookies =  request.getCookies();
if(cookies!=null){
	for(Cookie cookie:cookies){
         if("userName".equals(cookie.getName())){
	        username = cookie.getValue().trim();	//得到值
				username = URLDecoder.decode(username,"UTF-8");	//解码
				username = EncryptionCoder.DecryptCookie(username);//解密
			}
		}
	}

问题就这样解决了!
问题是解决了,可是出现这个情况的原因是什么呢?
我之前产生这个问题的原因是,我先进行了转码,然后再去加密;现在的顺序是,我先进行了加密,然后在进行转码
两者的区别在于先加密,转码的先后!
明白了这里以后,我把两种操作后,得到结果进行了对比,
第一种,先转吗,加密,YWRtaW4z\r\n
第二种,先加密,后转码YWRtaW4z%0D%0A
结果就是,第二种可以成功执行,第一种,无法执行
所以以后,在对字符需要进行加密,解密,转码,解码操作时,如果碰到了类似情况,可以尝试吧顺序换一下!

原文:https://my.oschina.net/gavinnie/blog/313461

发布了81 篇原创文章 · 获赞 44 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/daponi/article/details/102738147
今日推荐