我有一个包含哈希值的cookie myCookie
。此cookie设置为在一年后到期,并且路径为“/”。我需要使用新的哈希值更新此cookie。当我加载我的JSP脚本时,我会像这样检索cookie:
Cookie[] cookies = request.getCookies();
Cookie myCookie = null;
for (int i = 0; i < cookies.length; i += 1) {
if (cookies[i].getName().equals("myCookie")) {
myCookie = cookies[i];
break;
}
}
在确定需要更新cookie的值后,我会执行以下操作来更新它:
myCookie.setValue("my new value");
response.addCookie(myCookie);
检查结果,我现在有两个myCookie
实例:具有正确到期日期和路径的原始版本,以及旧的无效值;以及一个名为“myCookie”的新cookie,它在会话结束时到期,具有正确的值和JSP文档的路径。
如果我这样做:
myCookie.setValue("my new value");
myCookie.setPath(myCookie.getPath());
myCookie.setMaxAge(myCookie.getMaxAge());
response.addCookies(myCookie);
相同的事情发生了。我得到两个具有相同名称和不同属性的cookie。
Cookie对象在检索时是否不保留属性?我该如何更新此cookie?
注意:我不想修改路径或到期日期。我只想更新已经设置的cookie的值。
答案 0 :(得分:9)
根据RFC 2965的第3.3.4节,用户代理不会在发送到服务器的cookie标头中包含过期信息。因此,无法更新现有cookie的值,同时保留最初仅基于与cookie相关的信息设置的到期日期。
所以这个问题的答案是:你做不到。
答案 1 :(得分:2)
设置路径,例如:
cookie.setPath("/");
这应该覆盖旧的cookie值。
答案 2 :(得分:1)
如果您正在操作JSP中的cookie,您需要注意的一件事是响应是否已经提交。将内容写入输出流后,向响应中添加cookie是徒劳的。
答案 3 :(得分:0)
如果新Cookie不包含相同的名称,路径和域,您可以删除旧Cookie,方法是将MaxAge设置为(0)http://download.oracle.com/javaee/1.3/api/javax/servlet/http/Cookie.html#setMaxAge(int)
答案 4 :(得分:0)
def member = SecUser.get(userService.currentUser().id)
def cookies = request.getCookies()
def cookie;
def sum = 0;
def cookieSum = 0;
def cookieItems;
for(def i=0; i<cookies.size(); i++){
if (cookies[i].name == 'c17'){
cookie = cookies[i]
cookieItems = cookie.value.split('-')
println "cookieItems......."+cookieItems
if(params.itemId != null){
for(def j=0; j<cookieItems.size(); j++){
def oldItem = cookieItems[j].split('\\|')[0]
if(params.itemId != oldItem){
sum = sum + 1
}
}//Below code for Update your cookie value
if(sum == cookieItems.size()){
cookie.value = cookie.value +"-"+params.itemId+"|"+member.id
def b = cookie.value
cookie.setValue(b);
response.addCookie(cookie);
}
}
break
}
else{
cookieSum = cookieSum + 1
}
}
if ((cookieSum) == cookies.size()){
// Here ADD new cookie........
def a = params.itemId+"|"+member.id
cookie = new Cookie('c17',a.toString())
cookie.path = '/'
response.addCookie(cookie)
}
以上代码可以帮助您添加cookie并更新cookie值