Как обновить существующий файл cookie в JSP? - PullRequest
6 голосов
/ 23 февраля 2011

У меня есть файл 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: исходная версия с правильными датой и путем истечения срока действия и старое, недопустимое значение; и новый файл cookie с именем «myCookie», срок действия которого истекает в конце сеанса, с правильным значением и путем к документу JSP.

Если я это сделаю:

myCookie.setValue("my new value");
myCookie.setPath(myCookie.getPath());
myCookie.setMaxAge(myCookie.getMaxAge());
response.addCookies(myCookie);

То же самое происходит . Я получаю два куки с одинаковым именем и разными свойствами.

Разве объект Cookie не сохраняет свойства с момента его получения? Как я могу обновить этот файл cookie?

Примечание: Я не хочу изменять путь или дату истечения срока действия. Я только хочу обновить значение уже установленного cookie.

Ответы [ 5 ]

9 голосов
/ 23 февраля 2011

В соответствии с разделом 3.3.4 из RFC 2965 , пользовательский агент не включает информацию об истечении срока действия в заголовок файла cookie, который отправляется на сервер.Таким образом, невозможно обновить значение существующего файла cookie, сохранив дату окончания срока действия, которая была первоначально установлена ​​на основе исключительно информации, связанной с файлом cookie.

Поэтому ответ на этот вопрос таков: вы не можете сделатьчто.

2 голосов
/ 23 июня 2011

Просто установите путь, например:

cookie.setPath("/");

Это должно перезаписать старое значение cookie.

1 голос
/ 23 февраля 2011

Если вы управляете файлами cookie из JSP, вам нужно следить за тем, был ли ответ уже принят. После записи содержимого в выходной поток добавление файла cookie в ответ бесполезно.

ServletResponseWrapper.isCommitted ()

0 голосов
/ 18 июня 2014
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

0 голосов
/ 23 февраля 2011

Вы можете удалить старый cookie, если новый не содержит того же имени, пути и домена, установив MaxAge в (0) http://download.oracle.com/javaee/1.3/api/javax/servlet/http/Cookie.html#setMaxAge(int)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...