#java #jsf #cookies #jsf-2 #missing-cookies
#java #jsf #файлы cookie #jsf-2 #отсутствуют файлы cookie
Вопрос:
Я реализовал функцию «Запомнить меня» в своем веб-приложении. Я сделал это, используя cookie, который содержит имя пользователя / пароль, зашифрованные с помощью RSA.
Я добавляю cookie при входе в систему; если затем я выхожу из системы (не закрывая браузер), cookie считывается нормально, и на странице входа я вижу уже введенное имя пользователя / пароль. Но если я закрою браузер; или закрою вкладку и снова запущу приложение, когда файлы cookie будут прочитаны, единственным файлом cookie, который будет прочитан, будет JSESSIONID. cookie с учетными данными отсутствует в массиве, возвращаемом ((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies();
, хотя я могу видеть его в браузере. почему это?
Это код, который создает файл cookie:
String credentials = username "?" password;
Cookie c = CookieHandler.getInstance().createCookie("vtcred", credentials, rememberMe);
FacesContext facesContext = FacesContext.getCurrentInstance();
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(c);
и метод createCookie:
public Cookie createCookie(String name, String value, boolean rememberMe) {
value = encript(value);
Cookie credCookie = new Cookie(name, value);
credCookie.setHttpOnly(true);
if(rememberMe) {
credCookie.setMaxAge(86400);
}
else {
credCookie.setMaxAge(0);
}
return credCookie;
}
Редактировать: я устанавливаю максимальный возраст cookie на один день; и в браузере я вижу, что срок действия cookie истекает завтра, так что это не проблема
Заранее спасибо, Дэмиан
правка2: это очень странно, но, похоже, сейчас это работает. Я продолжу тестировать его и уведомлю. Спасибо.
Комментарии:
1. Сохранение имени пользователя и пароля в cookie, зашифрованном или нет, звучит не очень хорошей идеей
2. Можете ли вы опубликовать код, в котором вы устанавливаете cookie?
3. код добавлен @Kal @Matti Virkkunen, я знаю, что это не очень хорошая идея, но в моем случае это единственный выбор, который у меня есть, потому что веб-приложение, которое я разрабатываю, — это просто веб-интерфейс для существующей системы. Я использую вызовы веб-службы на сервере приложений (который содержит базу данных и большую часть логики)
Ответ №1:
Я обнаружил, почему иногда cookie не читается. Это связано с атрибутом path.
Если у кого-то возникла эта проблема, задайте путь к файлу cookie следующим образом:
Cookie c = new Cookie("name", "value");
cookie.setMaxAge(86400);
cookie.setPath("/");
С уважением
Ответ №2:
Возможно, вы захотите установить для cookie дату истечения срока действия. Если вы этого не сделаете, это будет длиться только до сеанса браузера.
Комментарии:
1. Извините, я забыл это сказать. Я устанавливаю максимальное значение на один день с помощью следующего кода: credCookie.setMaxAge(86400); и это работает, потому что, когда я вижу cookie в браузере, в поле «Expires» я вижу завтрашнюю дату.