0

我有一个客户端向我发送带有逗号分隔值的版本 1 cookie。这在 cookie 的版本 1 中应该可以,但在版本 0 中是不允许的。

所以这就是饼干

test.cookie=1,1

现在,当我阅读 Cookie[] cookies = request.getCookies[] 时,我返回了 2 个这样的 cookie:

test.cookie=1
1=

因此,它将 cookie 的值视为下一个 cookie 的分隔符,这是您在 cookie 的版本 0 中所期望的。所以问题是我可以在从中读取 cookie 之前设置传入 HttpServletRequest 的 cookie 版本。

我知道有一个 Cookie.setVersion(int) 方法,但这对我没有用,因为我没有设置容器的 cookie。(这实际上可能是在容器中设置 cookie 版本的线索,我现在要去看看)

编辑 我解决此问题的方法是仅读取标头,然后读取以分号分隔的列表形式出现的 Cookie 标头的值,然后自己解析每个 cookie 名称值对,从而解析 cookie 值中的逗号然后正确保存,我只得到一个cookie。很高兴知道是否有办法使用 HttpServleRequest.getCookies() 做到这一点。

4

3 回答 3

1

根据RFC2965RFC2109,字符在值字段中使用时需要用引号引起来,因此",". 这将帮助您暗示逗号是用于分隔两个 cookie 还是在值中具有含义。在我对RFC6265的理解中,,根本不允许这样做。

于 2012-08-27T13:21:18.153 回答
0

如果您无法控制来自客户端的 cookie,那么您只有选择。
将 cookie 分为两部分阅读,然后将它们自己组合成一个 cookie,然后使用它。使用类似下面的东西:

new_cookie.setValue(cookies[0].getValue()+cookies[1].getValue());

进行进一步的操作new_cookie

于 2012-08-27T17:40:16.583 回答
0

在 cookie 中编码值为我解决了这个问题。

于 2012-10-16T18:21:38.903 回答