• 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为8.5,

    环境不统一就会出现各种千奇百怪的异常,在此提醒大家开发环境、测试、正式环境软件版本一定要统一!!!

  • 相关阅读:
    Kmeans文本聚类系列(已经完成)
    提问的智慧
    公告:关于博客管理
    MSSQL语句备份
    贝叶斯分类专题
    利用Viterbi算法,二元词图分词系列
    从KL相对熵(relative entropy或 KullbackLeibler divergence,KL距离)看文本语义距离系列
    特征词选择算法对文本分类准确率的影响(五)
    新闻类网页正文提取系列
    特征词选择算法对文本分类准确率的影响(四)
  • 原文地址:https://www.cnblogs.com/zhangliang88/p/11670822.html
Copyright © 2020-2023  润新知