Servlets ServletExec中Cookie值缺少双引号和尾随等号
我有一个servlet应用程序,它将cookies存储为base64编码字符串。在应用程序在ServletExec上运行的服务器上,Cookie的值不会用引号括起来。此外,如果该值以“=”字符结尾,则该字符将被删除。缺少的引号和尾随“=”会阻止正确解析Cookie值。在其他两台服务器中,此应用程序运行在ServletExec和Tomcat上,并且此应用程序正在运行,Cookie用双引号括起来,并且尾随的“=”符号不会被删除 如浏览器的开发人员工具所示: 错误-cookiename:dGVzdHN0cmluZzE 应为-cookiename:“dGVzdHN0cmluZzE=”Servlets ServletExec中Cookie值缺少双引号和尾随等号,servlets,cookies,Servlets,Cookies,我有一个servlet应用程序,它将cookies存储为base64编码字符串。在应用程序在ServletExec上运行的服务器上,Cookie的值不会用引号括起来。此外,如果该值以“=”字符结尾,则该字符将被删除。缺少的引号和尾随“=”会阻止正确解析Cookie值。在其他两台服务器中,此应用程序运行在ServletExec和Tomcat上,并且此应用程序正在运行,Cookie用双引号括起来,并且尾随的“=”符号不会被删除 如浏览器的开发人员工具所示: 错误-cookiename:dGVzdHN
知道去掉引号和后面的“=”符号是什么吗?蒂亚 默认情况下,servlet
Cookie
类遵循。以下是一个引述自:
此类支持版本0(由Netscape提供)和版本1(由RFC2109提供)cookie规范。默认情况下,Cookie是使用版本0创建的,以确保最佳互操作性
版本0 cookie值在允许的字符中有限制。它只允许URL安全字符。其中包括字母数字字符(a-z、a-z和0-9)和少数词汇字符,包括-
、\u
、
、~
和%
。版本0 cookie中的所有其他字符都无效,包括“
和=
。如果服务器尚未执行此操作,浏览器将吞下无效字符
您最好的选择是对这些字符进行URL编码。这样,URL中不允许的每个字符都将按百分比编码为此表单%xx
,该表单作为cookie值有效
因此,在创建cookie时,请执行以下操作:
Cookie cookie = new Cookie(name, URLEncoder.encode(value, "UTF-8"));
// ...
阅读cookie时,请执行以下操作:
String value = URLDecoder.decode(cookie.getValue(), "UTF-8");
// ...
另一种方法是通过
Cookie#setVersion()切换到版本1 Cookie
,但这在IEThank you中不受支持。您知道是否可以通过Servletexec或Tomcat中的配置来设置cookie规范版本吗?我只是被一个事实弄糊涂了,即相同的应用程序在运行Servletexec的两台服务器中的行为不同。一些服务器(Tomcat、JBoss等)当您将错误字符设置为cookie变量时,隐式更改为版本1。这是修复安全错误的结果。但是,IE用户将失败(它不遵守最大值,cookie将作为会话cookie)。