cookie遇到java.lang.IllegalArgumentException: Control character in cookie value or attribute

java.lang.IllegalArgumentException: Control character in cookie value or attribute.

该异常说明cookie中的value或属性有控制字符,但是我设置的value并没有特殊字符。
初步怀疑是中文编码问题,于是在将字符串进行base64编码之前先用Cookie cookie = new Cookie("name", URLEncoder.encode(str, "UTF-8"));将原字符串先进行utf-8编码,但是结果还会有如上异常。
把原来字符串中的中文去掉,用英文代替,尝试结果还是失败,看来不是字符串编码问题。

从网上检索相关资料如下:
Cookie的长度限制:
(1) 浏览器所允许的每个域下的最大cookie数目,从网上找到的资料大概是这么个情况 
IE :原先为20个,后来升级为50个 
Firefox: 50个 
Opera:30个 
Chrome:180个 
Safari:无限制

当Cookie数超过限制数时浏览器的行为:IE和Opera会采用LRU算法将老的不常使用的Cookie清除掉,Firefox的行为是随机踢出某些Cookie的值。当然无论怎样的策略,还是尽量不要让Cookie数目超过浏览器所允许的范围。

(2) 浏览器所允许的每个Cookie的最大长度 
Firefox和Safari:4079字节 
Opera:4096字节 
IE:4095字节

我们这里关心的是cookie最大长度,IE支持的最大cookie长度可达4095字节,但是这个长度应该是整个cookie对象的大小,如何计算还不清楚。
我这边IE9测试结果是,value的长度最大是76个字符,这个是经过base65编码后的,编码前的原始字符串长度要比这个更小。
另外,尝试将cookie的name长度减小,发现value的最大支持长度还是没变,应该是个固定值。
如果要保存比较多的数据,要么使用多个cookie,要么保存数据库的id等关键信息,下次取出后再查询数据库或读文件等。

以上的解决办法都尝试了,虽然系统运行正常,cookie也保存了,也可以正常记住密码并且登录。可是后台还是报错Control character in cookie value or attribute

后来才发现测试服务器环境与本地开发环境不一样,测试服务器Tomcat为7.0版本,而本地开发环境tomcat为6.0,环境不统一就会出现各种千奇百怪的异常,在此提醒大家开发环境、测试、正式环境软件版本一定要统一!!!

原文地址:https://www.cnblogs.com/zhangliang88/p/11670822.html

时间: 2024-10-25 19:11:06

cookie遇到java.lang.IllegalArgumentException: Control character in cookie value or attribute的相关文章

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Control character in cookie value or attribute.

1 HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: Control character in cookie value or attribute. 2 type Exception report 3 4 message Request processing failed; nested exception is java.lang.Illega

创建Cookie抛出异常:java.lang.IllegalArgumentException: Control character in cookie value

调用Cookie对象的构造函数可以创建Cookie.Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值.   名字和值都不能包含空白字符以及下列字符:[ ] ( ) < > = , " / ? @ : ; 错误出在response.addCookie(cookie)://cookie 是一个Cookie实例. J2EE Doc里面的,cookies只支持ASCII字符,而且不能有逗号,分号,空白.或者以$开头.名字在创建后不能改变.如果要存储中文的,先用UR

java.lang.IllegalArgumentException: Illegal character in query at index 261

在BaseFragment中使用了LoadingPage,而LoadingPage的联网加载使用的是AsyncHttpClient.一直报java.lang.IllegalArgumentException: Illegal character in query at index 261解析不成功,改成OkHttp解析即可. 网上有些方法,说先URLEncode再拼接,如果解决不了,换个联网请求方式,试一下.

HTTP错误:java.lang.IllegalArgumentException: Illegal character in scheme at index 0: ?http://xxxxxx

读取T卡文件里的域名,HTTP请求出现如下错误 java.lang.IllegalArgumentException: Illegal character in scheme at index 0: http://xxxxxxxxxxx at java.net.URI.create(URI.java:727) at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:84) ...... 出现该错误时,读取域名的代码如下 p

【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value

创建时间:6.30 java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value 报错原因: Tomcat 8.5版本,在cookie值中不能使用空格. 代码: 1 protected void doGet(HttpServletRequest request, HttpServletResponse response) 2 throws ServletException

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

微信小程序前后台使用get方式传参时报错如图.但在微信开发平台和苹果测试都没事,在安卓手机上就报这个错,猜想原因是get传递了汉字的原因. 尝试了下在后台输出从前台获取的参数,但是后台什么也没有获取到,直接报错. 最后用id替换了url里的中文:因为搜索功能不能替换中文的,改成了post请求. 参考:[Java EE]get和post请求的编码过程get请求中文参数乱码的解决之道 网上也有很多报这个错的原因是含有特殊字符:有些版本的Tomcat严格按照 RFC 3986规范进行访问解析,而 RF

java.lang.IllegalArgumentException: Invalid character found in the request target.

http参数存在特殊字符: 特殊字符是出现在后面跟的参数中,对参数进行 URL 编码,可以使用 JavaScript 中的 encodeURIComponent() 函数. 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9717274.html

cookie设置日期时间有空格报错:java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value

rt,代码及报错如下: java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value 现暂时将"yyyy-MM-dd hh:mm:ss"中的空格用#替代,就能正常显示时间日期了...

java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value

今天在练习 cookie时意外的报了这个错. java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value1这句话的意思是 一个不识别的字符[32]出现在了cookie当中 由于tomcat的版本比较高,所以在addCookie时是不能使用空格的 而在ASCII码中32对应的就是空格.只要把后台代码中的空格删掉就可以了. 我的代码:是在cookie中添加了时间,而时间的格