#java #servlets #cookies #remember-me
#java #сервлеты #файлы cookie #запомнить-меня
Вопрос:
Мне нужно реализовать простую опцию запоминания меня в java-сервлете с файлами cookie без использования какой-либо расширенной платформы.
Сначала, при входе в систему, я создаю файл cookie и отправляю его в ответ браузеру (клиенту). Значение, которое будет сохранено в файле cookie, представляет собой простой хэш из имени пользователя пароля.
Как я должен управлять входящим запросом из браузера, отправляя файл cookie? Мой подход заключается в проверке между зарегистрированными пользователями, есть ли какой-либо пользователь, у которого хэш из имени пользователя пароля равен значению в файле cookie? Правильный ли этот подход?
Кроме того, я не совсем понял, каков механизм истечения срока действия. Удаляет ли браузер файл cookie, когда срок его действия истек, нет, как мне проверить, истек ли срок действия файла cookie?
Ответ №1:
Пока вы не используете HTTPS, предлагаемый вами метод крайне небезопасен. Я бы предложил сгенерировать какой-либо токен сеанса (например, использовать java.util.UUID.randomUUID()
) и установить это как cookie и сохранить его где-нибудь на стороне сервера, чтобы позже вы могли идентифицировать пользователя, связанного с этим идентификатором сеанса в cookie.
Это дает вам возможность сбросить определенный файл cookie сеанса, если вы считаете, что происходит какое-то мошенничество, и нет прямой связи между именем пользователя / паролем и идентификатором cookie, который вы используете. Но обратите внимание: этот метод по-прежнему уязвим для атаки «человек посередине».
Что касается истечения срока действия: да, файл cookie становится недействительным и может быть удален браузером, если срок его действия истек. Но вы можете установить для файла cookie значение, равное 3000 году, чтобы он жил вечно.