tomcat下的Cookie特殊符号问题
2017-04-25 12:14
267 查看
案例:
在项目中通过Cookie方式临时存放检索条件,不小心在Cookie值中使用了特殊符号"@",导致在服务器端无法正确解析Cookie值。
之所以说"不小心",根本原因是对于Cookie的理解不够深入。
实际上在开发环境使用run-jetty-run插件进行调试时并未发现问题,经验证:
在jetty下可以在Cookie中使用特殊符号@,但是在Tomcat下不能在Cookie中使用特殊符号@。
Cookie规范经历了多个版本发展,分别是: RFC 2109(1997年),RFC 2965(2000年), RFC 6265(2011年)。
Cookie值的约定见rfc2068描述(https://tools.ietf.org/html/rfc2068):
Many HTTP/1.1 header field values consist of words separated by LWS or special characters. These special characters MUST be in a quoted string to be used within a parameter value. token = 1*<any CHAR except CTLs or tspecials> tspecials = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
对应的,在Tomcat实现中javax.servlet.http.Cookie对特殊字符的定义如下:
class RFC6265Validator extends CookieNameValidator { private static final String RFC2616_SEPARATORS = "()<>@,;:\\\"/[]?={} \t"; RFC6265Validator() { super(RFC2616_SEPARATORS); } }
显然,相应特殊字符在Tomcat下不要在Cookie中使用,否则会导致Tomcat无法正确解析Cookie信息。
而跟踪jetty源码发现,org.eclipse.jetty.server.CookieCutter方法parseFields()并不会把Cookie中的"@"作为特殊字符过滤掉。
总结:
虽然在jetty中侥幸可以使用特殊字符@作为Cookie值,但是建议在Cookie中不要使用任何特殊字符,否则应用程序的移植性太差。
而且,对于存储的Cookie,最好进行编码处理。如通过escape()方法对Cookie进行编码:
function setCookie(c_name,value,expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie=c_name + "=" + escape(value)+ ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()); }
【参考】
https://en.wikipedia.org/wiki/HTTP_cookie
https://tools.ietf.org/html/rfc2109
https://tools.ietf.org/html/rfc2965
https://tools.ietf.org/html/rfc6265
http://www.blogjava.net/stone2083/archive/2010/11/03/336923.html 关于cookie特殊字符的一点理解
https://www.biaodianfu.com/cookie-symbol.html Cookie与特殊字符
相关文章推荐
- tomcat请求url中带有特殊符号{}|返回400的问题
- tomcat 请求url中带有特殊符号{} | 返回400的问题
- 关于oracle插入特殊符号的问题
- asp.net URL多参数傳值以及特殊符号传值问题
- ios中解决xml特殊符号的问题
- java远程共享文件访问jcifs解决密码中特殊符号问题
- 转载:**URLEncoder会把所有的符号都进行转换**原名(Tomcat6与Java下载文件编码问题 )
- “无法解析外部符号 __security_cookie”问题解决
- url参数中有+、空格、=、%、&、#等特殊符号的问题解决
- 关于特殊符号在XML中的问题
- svn add 包含特殊符号的问题
- 关于Gson解析时候特殊符号,被转义的问题,如’单引号
- Flex+Java组合解决汉字或特殊符号(如&等)文件下载时的文件名乱码问题
- php数据库连接时容易出错的特殊符号问题
- URI中特殊符号的编码问题
- mongo shell中特殊判断符号转义的问题
- “无法解析外部符号 __security_cookie”问题解决 - 通星技术 - CSDNBlog
- Highlighter添加结尾,保证结尾特殊符号不被过滤所带来的另一个问题
- office 2003 无法插入特殊符号问题 [转]
- asp特殊符号的一些问题