У меня проблема с Apache Tomcat 6.0.20, из-за которой я не могу изменить значение cookie, как только оно добавлено в ответ. По сути, я пытаюсь воспроизвести функциональность сеанса с помощью файлов cookie. У меня есть собственный объект "Session", который поддерживается файлом cookie. Когда я создаю свой сеанс, я передаю ему HttpServletResponse, и он создает и добавляет пустой файл cookie в ответ. Затем, когда мой код вызывает метод Session.put (), я хочу изменить значение этого файла cookie.
Я вижу, что после добавления файла cookie в ответ любые вызовы Cookie.setValue () в основном бесполезны. Используя отладчик, я вижу, что сам cookie изменяется, но заголовок Set-Cookie в объекте ответа остается неизменным (он содержит начальное значение cookie, обычно просто пустую строку). Я даже пытался создать новый файл cookie и повторно добавить его в ответ, но это также не влияет на заголовок Set-Cookie.
Странно то, что я использую библиотеку, написанную несколько лет назад нашими разработчиками. В прошлом мы использовали веб-сервер JRun 3.1, так что, наверное, каждый веб-сервер по-разному обрабатывает эти операции с файлами cookie.
Кто-нибудь сталкивался с этой проблемой раньше? Единственное решение, которое у меня сейчас есть, которое гарантированно сработает, - это не добавлять cookie в ответ, пока я не буду уверен, что я закончил с моим пользовательским объектом Session. Я могу создать метод с именем Session.saveTo (HttpServletResponse), который добавит файл cookie в ответ. Это работает, но некоторые из наших JSP могут быть довольно сложными, поэтому я бы предпочел, чтобы Session автоматически сохранялся при каждом размещении, если я забуду вызвать Session.saveTo ().
Чтобы уточнить, это фактически то, что я делаю:
Cookie cookie = new Cookie("custom-session", "initial");
response.addCookie(cookie); // Set-Cookie header has 'custom-session=initial'
cookie.setValue("new value"); // does not change Set-Cookie header
response.addCookie(cookie); // re-adding the same cookie, does not work either
После всего этого мой браузер создает файл cookie, в котором пользовательский сеанс является «начальным», а не последним значением, которое я установил.