Печенье для "Помни меня" в JSF - PullRequest
8 голосов
/ 29 апреля 2011

У меня есть страница входа в систему, и я хочу добавить функцию «Запомнить меня»; так что если пользователь выходит из системы и снова открывает страницу, его имя пользователя и пароль загружаются. Для этого, когда пользователь входит в систему (и отмечен флажок «Запомнить меня»), я сохраняю следующие файлы cookie:

FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie userCookie = new Cookie("vtusername", username);
userCookie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(userCookie);
Cookie passCokie = new Cookie("vtpassword", password);
passCokie.setMaxAge(3600);
 ((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(passCokie);

Проблема в том, что позже (в том же сеансе) я читаю куки и вижу, что maxAge = -1; хотя я устанавливаю его на 3600 ... почему? Другая проблема: если я установил cookie-файл безопасным с помощью userCookie.setSecure (true), я не смогу его прочитать (он исчезнет).

Еще один вопрос: так как пароль хранится в cookie, я должен как-то его зашифровать? что такое лучшая практика?

Заранее спасибо

1 Ответ

8 голосов
/ 29 апреля 2011

Проблема в том, что позже (в том же сеансе) я читаю куки и вижу, что maxAge = -1;хотя я устанавливаю его на 3600 ... почему?

Поскольку браузер не отправляет данные обратно.Он только отправляет cookie имя = значение обратно.Maxage хранится только в браузере.Вы можете проверить это в программе просмотра файлов cookie / редакторе самого веб-браузера.Например, в Firefox вы можете проверить все файлы cookie с помощью Инструменты> Параметры> Конфиденциальность> Удалить отдельные файлы cookie .Введите домен (например, localhost), чтобы увидеть файлы cookie.

Другая проблема: если я установлю файл cookie безопасным с помощью userCookie.setSecure (true), то я не смогу его прочитать (он исчезнет)).

Работает только тогда, когда запрос / ответ обслуживается по HTTPS, а не по HTTP.Кроме того, когда запрос уже обслуживается по протоколу HTTPS, он по умолчанию уже имеет значение secure = true.

Еще один вопрос: поскольку пароль хранится в файле cookie, следует ли мне зашифровать егокак?Каков наилучший метод?

Не храните необработанное имя / пароль в двух файлах cookie.Кроме того, это может быть просто одним файлом cookie, это очень плохая идея и ее легко взломать.Используйте один файл cookie с автоматически сгенерированным длинным уникальным значением, которое невозможно угадать.Сохраните это значение вместе с идентификатором пользователя в базе данных на стороне сервера.Когда кто-то посещает ваш сайт с этим файлом cookie, но пользователь еще не вошел в систему (т. Е. Нет объекта User в сеансе), вы можете выполнить автоматический вход.

См. Также:

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