如何更新JSP中的现有cookie?

时间:2011-02-23 15:48:50

标签: java jsp cookies

我有一个包含哈希值的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的值。

5 个答案:

答案 0 :(得分:9)

根据RFC 2965的第3.3.4节,用户代理不会在发送到服务器的cookie标头中包含过期信息。因此,无法更新现有cookie的值,同时保留最初仅基于与cookie相关的信息设置的到期日期。

所以这个问题的答案是:你做不到。

答案 1 :(得分:2)

设置路径,例如:

cookie.setPath("/");

这应该覆盖旧的cookie值。

答案 2 :(得分:1)

如果您正在操作JSP中的cookie,您需要注意的一件事是响应是否已经提交。将内容写入输出流后,向响应中添加cookie是徒劳的。

ServletResponseWrapper.isCommitted()

答案 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值