Я пишу приложение для Android, которое отправляет имя пользователя и пароль в сервлет Java, размещенный на Google App Engine. Я пишу оба приложения для Android. и сервлет.
Имя пользователя и пароль упаковываются в POST-запрос на устройстве, а метод сервлета doPost () проверяет значения. Если имя пользователя и пароль верны, я запрашиваю сеанс ... создавая его, если он не существует:
HttpSession session = request.getSession(true);
В этом сеансе я храню пару имя-значение "logged" и "true".
Вернувшись на устройство Android, возвращается cookie с HTTP-статусом 200 OK. Все это выглядит нормально, поскольку сеанс на сервере реализован с использованием файлов cookie (для меня это прозрачно, поскольку я просто использую API сеанса).
Все последующие HTTP POST, сделанные устройством Android, упаковывают cookie в HTTP POST, чтобы он мог запрашивать страницы .jsp или использовать другие сервлеты, которые проверяют сессию на значение «logged» и «true» (т.е. защищенные страницы). .
Проблема: cookie возвращается, даже если следующий код НЕ запущен:
HttpSession session = request.getSession(true);
т.е. имя пользователя и пароль были ложными. Это не такая проблема безопасности, поскольку пара «зарегистрированное» и «истинное» имя-значение никогда не устанавливается, поэтому приложение не может использовать .jsp или другие сервлеты. Однако я использовал тот факт, что cookie-файл был возвращен из запроса POST на устройство в качестве знака успешной аутентификации.
Почему я получаю печенье, хотя я не использую или не запрашиваю использование сеанса?
Мое текущее решение - создать дополнительный файл cookie в сервлете и проверить его на устройстве. ОДНАКО, этот файл cookie не является файлом, который упакован в последующие сообщения с устройства, поскольку он не является файлом cookie, связанным с сеансом, содержащим «зарегистрированное» «истинное» значение. Это кажется вздорным. Я явно что-то не так понял.