#tomcat #cookies #asp-classic #escaping
#tomcat #файлы cookie #asp-classic #убегающий #экранирование
Вопрос:
У нас есть сайт, который объединяет веб-приложения Java под управлением Tomcat со страницами ASP, включая обмен информацией в файлах cookie в традиционном формате ключ / значение ASP:
Cookie: foo=a=bamp;c=d; ...
Начиная с версии Tomcat 5.5.26, обработка файлов cookie была немного изменена, в результате чего значение нашего файла cookie теперь заключено в кавычки, чего раньше не было:
Cookie: foo="a=bamp;c=d"; ...
Однако у нас есть код ASP, который также считывает этот файл cookie и который ожидает, что значения в нем будут обрабатываться таким образом:
Response.Write("[" Request.Cookies("foo")("c") "]");
Теперь это не возвращает ожидаемый результат:
[d"]
Я прочитал об использовании:
javax.servlet.http.Cookie#setVersion(int)
чтобы изменить это поведение, но, похоже, это не то, что здесь нужно. Я знаю, что приведенное значение более «правильное», но попробуйте сообщить об этом ASP… Есть ли какой-нибудь трюк, который я пропустил, чтобы заставить ASP (или Tomcat) вести себя хорошо? ТИА, как всегда.
Ответ №1:
Файлы cookie, указанные в кавычках, соответствуют версии cookie> 1 или 2 файла cookie, не заключенные в кавычки, действительны для версии cookie 0
Если вы посмотрите на очень интересное обсуждение в tomcats bugzilla: https://issues.apache.org/bugzilla/show_bug.cgi?id=44679 похоже, существует несколько способов настроить поведение файлов cookie tomcats.
Если у вас есть контроль над настройкой файлов cookie tomcat, то это было бы способом переключиться на файлы cookie без кавычек:
Cookie cookie = new Cookie(COOKIENAME,COOKIEVALUE);
cookie.setVersion(0);
Этот файл cookie будет сохранен без кавычек, но также ограничит вас меньшим набором символов и дополнительными правилами, такими как отсутствие каких-либо начальных / завершающих пробелов.
Комментарии:
1. Спасибо. Это, конечно, правильно, но реальная, неразрешимая проблема заключается в том, что ASP classic не заключает файлы cookie в кавычки, а добавляет недопустимые символы, такие как = , и не понимает файлы cookie в кавычках; две технологии находятся в конфликте. Мы надеемся, что очень скоро мы разберемся с этим, исключив ASP.