Java 如何在JSP中更新现有cookie?

Java 如何在JSP中更新现有cookie?,java,jsp,cookies,Java,Jsp,Cookies,我有一个cookie,mycokie,它包含一个散列值。此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("my

我有一个cookie,
mycokie
,它包含一个散列值。此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;
  }
}
检查结果后,我现在有两个myookie的实例:具有正确过期日期和路径的原始版本,以及旧的无效值;以及一个名为“mycokie”的新cookie,该cookie在会话结束时过期,具有正确的值和JSP文档的路径

如果我这样做:

myCookie.setValue("my new value");
myCookie.setPath(myCookie.getPath());
myCookie.setMaxAge(myCookie.getMaxAge());
response.addCookies(myCookie);
同样的事情也会发生。我得到两个具有相同名称和不同属性的cookie

Cookie对象是否不保留检索时的属性?如何更新此cookie


注意:我不想修改路径或过期日期。我只想更新已设置的cookie的值。

如果新cookie不包含相同的名称、路径和域,则可以删除旧cookie,方法是将MaxAge设置为(0))

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


因此,这个问题的答案是:您不能这样做。

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

只需设置路径,例如:

cookie.setPath("/");
这将覆盖旧的cookie值。

def member=SecUser.get(userService.currentUser().id)
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)
    }
def cookies=request.getCookies() def曲奇; def sum=0; def-cookieSum=0; def Cookie项目;
对于(defi=0;我看了一下:@Ralph,这对我有什么帮助?你的域和路径相同吗?也看这里)谢谢。我不会在发送任何内容后添加cookie。我的所有cookie验证都是在将任何内容发送到客户端之前完成的。1)查看接受的答案,了解无法更新现有cookie的原因。2) 您的代码绝对不是JSP。3) 您的代码显然是特定于您的应用程序的(SecUser?这是从哪里来的,它与这个问题有什么关系?)
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)
    }