初次使用Cookies编程的时候遇到很多问题,创建Cookie的问题尤其多。
问题本身并不难解,关键是他只出现在我使用的电脑上,其实原因很简单,Cookie名中包含了‘@’,Cookie值中包含了‘,’。 :cry:
[quote]调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。
[color=red]名字和值都不能包含空白字符以及下列字符:[ ] ( ) < > = , " / ? @ : ; [/color] [/quote]
[color=darkred]其实cookie中的敏感字符不止这些,这和浏览器、操作系统有关,所以我建议在使用cookie时,尽量避免使用敏感字符,最好只让字母 数字 . - _出现。[/color]
今天我又遇到了这样的问题: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()方法。
关于Cookie的基础知识参见:[url=http://hanxin830311.iteye.com/blog/195189]用jsp处理Cookie[/url]
问题本身并不难解,关键是他只出现在我使用的电脑上,其实原因很简单,Cookie名中包含了‘@’,Cookie值中包含了‘,’。 :cry:
[quote]调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。
[color=red]名字和值都不能包含空白字符以及下列字符:[ ] ( ) < > = , " / ? @ : ; [/color] [/quote]
[color=darkred]其实cookie中的敏感字符不止这些,这和浏览器、操作系统有关,所以我建议在使用cookie时,尽量避免使用敏感字符,最好只让字母 数字 . - _出现。[/color]
今天我又遇到了这样的问题: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的基础知识参见:[url=http://hanxin830311.iteye.com/blog/195189]用jsp处理Cookie[/url]