`

创建Cookie异常:IllegalArgumentException

    博客分类:
  • bug
阅读更多
初次使用Cookies编程的时候遇到很多问题,创建Cookie的问题尤其多。

问题本身并不难解,关键是他只出现在我使用的电脑上,其实原因很简单,Cookie名中包含了‘@’,Cookie值中包含了‘,’。
引用
调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。
  名字和值都不能包含空白字符以及下列字符:[ ] ( ) < > = , " / ? @ : ; 


其实cookie中的敏感字符不止这些,这和浏览器、操作系统有关,所以我建议在使用cookie时,尽量避免使用敏感字符,最好只让字母 数字 . -  _出现。

今天我又遇到了这样的问题:java.lang.IllegalArgumentException: Control character in cookie value, consider BASE64 encoding your value

错误出在response.addCookie(cookie);//cookie 是一个Cookie实例。

很显然Cookie之中存在了非法参数,经过测试发现cookie之中包含"\r\n"、"\n"时就会出现这个异常。

因为cookie中部分值是通过文本框录入的,在<textarea/>标签中键入回车键后,value值中就加入了"\r\n",把这样的值付给cookie,执行response.addCookie(cookie);时则出现异常。

解决办法:使用String类的replace()方法。
str = str.replace("\r\n", "<br>");			
str = str.replace("\n", "<br>");

Cookie cookie = new Cookie('cookName',str);
//永久有效
cookie.setMaxAge(60*60*24*365);
response.addCookie(cookie);




关于Cookie的基础知识参见:用jsp处理Cookie            


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics