tomcat中接受请求中的cookie值若含有等号,等号后内容会丢失

问题:

使用tomcat时,若某个cookie的值中含有等号,则从request.getCookies()再getValue()后会丢失等号之后的内容,例如:若cookie为ninfo=id=123&name=zhangshan;ntime=20150731,则从request.getCookies()取得名为ninfo的cookie值为“id",而不是期望的“id=123&name=zhangshan”。

而同样的代码在jetty中就可正常取得。

对于这个问题,https://issues.apache.org/bugzilla/show_bug.cgi?id=44679这个链接里面有讨论.

核心内容为:

org.apache.tomcat.util.http.ServerCookie. ALLOW_EQUALS_IN_VALUE system property was introduced in Tomcat 6.0.24.


Tomcat truncating cookies with = values

Starting with Tomcat 6.0.18 and in Tomcat 7.x any cookie containing a “=” will be truncated. Where you would expect your cookie to hold all values, e.g. “value1=myname&value2=password” you will only be able to retrieve the “value1=”.

This is because Tomcat now adheres to the cookie spec more tightly than previous versions. If you are in control of the cookie you might be able to change it and work around this. If not, then you can can change the settings within the catalina.properties file by appending the following two settings:

org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true


解决:

在tomcat的catalina.sh里加入一行

CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE=true -Dorg.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true"


参考:

http://bingoohuang.iteye.com/blog/1401461

http://thenitai.com/2013/05/02/tomcat-truncating-cookies-with-values/

转载于:https://my.oschina.net/u/1377774/blog/485997

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值