【发布时间】:2012-02-06 17:45:39
【问题描述】:
我一直想知道为什么我的应用程序允许重复投票有一段时间了,最后调试了这个问题。
当您投票时,您会得到一个名为“vote”的 cookie,其值是您投票的“事物”的 ID。
Cookie voteCookie = new Cookie("vote", "1901");
voteCookie.setMaxAge(60*60*24*365);
response.addCookie(voteCookie);
我检查了客户端(Chrome),有一个名为“vote”的cookie,其值为“1901”
当我像这样在我的 Spring 控制器中读取这个 cookie 时:
Cookie[] cookies = request.getCookies();
我现在有两个 cookie:
CookieName: ["vote"] Value: [""]
CookieName: ["1901"] Value: [""]
JSESSIONID 等其他 cookie 正确:
CookieName: ["JSESSIONID"] Value: [000046KQaPe3T8gwXVuB3zhNrON:-1]
我做错了什么?
编辑:原来有一些代码将旧值附加到新值:
voteCookie.setValue(voteCookie.getValue() + "," + cookieValue);
这似乎是导致问题的原因。 “,”(逗号)之后的值成为另一个具有该名称的 cookie。我不确定这是 WebSphere Application Server 问题还是什么。但是将分隔符更改为“-”,一切正常!
【问题讨论】:
-
我觉得它比
new Cookie("vote", "1901");更多。你能发布调用这个构造函数的实际代码吗? -
以及枚举cookies的代码。
-
看起来cookie正在被添加到响应中,所以不是它......
-
@adarsh 你是对的,有一些代码将旧值附加到新值中。我会更新问题