【问题标题】:Cookie value in double quotes [duplicate]双引号中的 Cookie 值 [重复]
【发布时间】:2015-07-27 20:22:23
【问题描述】:

我在 tomcat 6.0.33 上部署了一个应用程序,它生成一个带有正斜杠 (/) 作为 cookie 值中的字符之一的 cookie。现在由于某种原因,只要存在正斜杠,tomcat 就会将 cookie 值括在双引号中。当我的 cookie 值中存在正斜杠时,如何更改 tomcat 行为以避免使用双引号?

注意我不同意 BaluC 认为这是一个重复的问题。在发布这个之前,我确实检查了另一个。我在这个问题中特别询问了如何更改 tomcat 行为以删除引号。这与提问者想知道为什么首先引入双引号的其他问题完全不同。

【问题讨论】:

  • 我也认为这两个问题之间有重叠,但我不会称它们为 exact 重复。另一个问题中提到的SPACE 字符需要编码,而这个问题中提到的forward slash (/) 或困扰我的equals sign (=) 应该被接受无需编码或引号。事实上tomcat 8.x 现在允许他们:The '=' and '/' characters are always permitted in a cookie value.
  • 这个问题的答案对另一张票很有用,但被错误标记为重复的票则没有用。显然不是骗子
  • @NicholasDiPiazza “显然不是骗子” - 一个奇怪的案例,删除两个 not 与原始句子的含义不同。显然不是双重否定。
  • 不知道当我发布那个大声笑时我在吸什么。我想我是在指出,作为该票证答案的票证不是有用的答案。这张票中的答案是一个有用的答案。也许是那些“过分热心”的门票关闭之一。

标签: http tomcat cookies


【解决方案1】:

我发现问题出在 Tomcat 版本上。 cookie 处理器在遇到正斜杠时将 cookie 值括在引号中。我升级到 Tomcat 7,这些报价都消失了。 Tomcat 7 放宽了 cookie 值的规则。

我进一步发现,即使在 Tomcat 7 中,如果 cookie 值中有 '=',Tomcat 也会将该值括在双引号中。我通过进一步升级到 Tomcat 8 然后将其 cookie 处理器更改为 Rfc6265CookieProcessor 克服了这个问题。

【讨论】:

  • 更具体地说,CookieProcessor 是在 Tomcat 8.0.15 中引入的以及它的两个实现:旧的 LegacyCookieProcessor 和新的 Rfc6265CookieProcessor
  • 在 tomcat 8.3 中仍然发生在我身上。 Cookies.add(response, KEY, "!'()*-._~");在客户端周围生成报价。
  • 哇,这样做有点奇怪。谢谢!对我来说,我总是使用辅助函数getCookie,所以我刚刚添加了:cookieValue = StringUtils.strip(cookieValue, "\"");
【解决方案2】:

您应该使用 rawurlencode(),而不是 urlencode() 来转义路径部分。 urlencode() 命名错误,它实际上是用于 application/x-www-form-urlencoded 数据,例如查询字符串或 POST 请求的正文,而不是 URL 的其他部分。

【讨论】:

  • 我不想添加任何额外的编码。我希望在没有引入双引号的情况下写出字符串值。
  • 这是你存储cookie的函数,尝试使用rawurlencode()函数,结果将没有双引号。
  • 正斜杠不应要求 URL 编码(任何类型的)。​​
猜你喜欢
  • 2013-07-06
  • 2012-01-06
  • 1970-01-01
  • 2011-10-25
  • 2012-04-15
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多