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

6

我有一个名为myCookie的cookie,其中包含一个哈希值。该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的值。


请查看以下链接:https://dev59.com/tVPTa4cB1Zd3GeqPnusd - Ralph
@ Ralph,那怎么能帮到我呢? - James Sumners
你的域名和路径是否相同? - Ralph
请看这里) https://dev59.com/9nNA5IYBdhLWcg3wn_Q1 - Stan Kurilin
5个回答

9
根据RFC 2965第3.3.4节规定,用户代理程序在发送给服务器的cookie头中不包含到期信息。因此,仅基于与cookie相关联的信息设置的到期日期无法保留现有cookie值并更新之。因此,对于这个问题的回答是:无法实现。

2

只需设置路径,例如:

cookie.setPath("/");

这将覆盖旧的cookie值。


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

ServletResponseWrapper.isCommitted()


谢谢。我在发送任何内容后都没有添加 cookie。在向客户端发送任何内容之前,我进行了所有 Cookie 验证。 - James Sumners

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的值


  1. 请查看被接受的答案,了解为什么无法更新现有的Cookie。
  2. 您的代码绝不是JSP。
  3. 您的代码显然是针对您的应用程序而编写的(SecUser?它从哪里来,与此问题有什么关系?)
- James Sumners

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接